Notepad++绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad++默认的快捷键做个整理(其中有颜色的为常用招数):
1.文件相关
快捷键 | 动作定义 |
---|
Ctrl-O | 打开文件 |
Ctrl-N | 新建文件 |
Ctrl-S | 保存文件 |
Ctrl-Alt-S | 文件另存为 |
Ctrl-Shift-S | 保存所有打开文件 |
Ctrl-P | 打印 |
Alt-F4 | 退出程序 |
Ctrl-Tab | 文件标签跳转,跳至下一个打开文件 |
Ctrl-Shift-Tab | 文件标签跳转,跳至上一个打开文件 |
Ctrl-W | 关闭当前文件 |
2.编辑相关
快捷键 | 动作定义 |
---|
Ctrl-C | 复制 |
Ctrl-Insert | 同上,复制 |
Ctrl-Shift-T | 复制当前行至剪贴板 |
Ctrl-X | 剪切 |
Shift-Delete | 同上,剪切 |
Ctrl-V | 粘帖 |
Shift-Insert | 同上,粘帖 |
Ctrl-Z | 撤销上一次操作 |
Alt-Backspace | 同上 |
Ctrl-Y | 重做,注:撤销后,重做刚刚撤销的动作 |
Ctrl-A | 全选 |
Alt-Shift-方向键或Alt+鼠标左键 | 列选择模式 |
Ctrl+鼠标左键 | 非连续性的多区域选择 |
ALT-C | 列编辑器 |
Ctrl-D | 复制当前行至下方,或者复制选中区域至其后 |
Ctrl-T | 复制当前行至剪贴板(注:帮助中说是将当前行与上一行交换位置) |
Ctrl-Alt-T | 与上一行进行交换 |
Ctrl-Shift-Up | 将当前行上移一行 |
Ctrl-Shift-Down | 将当前行下移一行 |
Ctrl-L | 删除当前行 |
Ctrl-I | -(注:帮助中是分割多行,不过最新版中不起作用) |
Ctrl-J | 合并多行(注:使用时要选择中需要合并的行) |
Ctrl-G | 跳转至某行对话框 |
Ctrl-Q | 添加/删除注释 |
Ctrl-Shift-Q | 区块添加/删除注释 |
Tab(selectionofoneormorefulllines) | 插入Tab |
Shift-Tab(selectionofoneormorefulllines) | 删除位置之前的Tab |
Ctrl-BackSpace | 删除当前位置至单词开始的内容 |
Ctrl-Delete | 删除当前位置至单词结尾的内容 |
Ctrl-Shift-BackSpace | 删除当前位置至行首的内容 |
Ctrl-Shift-Delete | 删除当前位置至行尾的内容 |
Ctrl-U | 转换为小写 |
Ctrl-Shift-U | 转换为大写 |
Ctrl-B | 跳转至配对的括号 |
Ctrl-Space | 触发函数自动完成列表 |
Ctrl-Shift-Space | 触发函数参数提示 |
Ctrl-Enter | 触发关键字自动完成列表 |
Ctrl-Alt-R | 整个页面文字方向从右到左 |
Ctrl-Alt-L | 整个页面文字方向从左到右(注:在安装了zencoding后,此快捷键可能被覆盖) |
Enter | 回车 |
Shift-Enter | 同上 |
建议添加一个快捷键用来复制当前行至下一行:
在设置->快捷键管理中,选择scintillacommands中,找到SCI_LINEDUPLICATE,给它指定一个快捷键,例如Ctrl+M
3.搜索相关
快捷键 | 动作定义 |
---|
Ctrl-F | 打开搜索对话框 |
Ctrl-H | 打开替换搜索对话框 |
F3 | 搜索下一个结果 |
Shift-F3 | 搜索上一个结果 |
Ctrl-Shift-F | 文件中搜索 |
F7 | 调到寻找结果 |
Ctrl-Alt-F3 | 快速查找下一个 |
Ctrl-Alt-Shift-F3 | 快速查找上一个 |
Ctrl-F3 | 选定并寻找下一个 |
Ctrl-Shift-F3 | 选定并寻找上一个 |
F4 | 下一次寻找结果 |
Shift-F4 | 上一次寻找结果 |
Ctrl-Shift-I | 增量查找 |
Ctrl-n | 跳至下一个结果,用第n个风格标识(n为1~5,0是默认风格) |
Ctrl-Shift-n | 跳至上一个结果,用第n个风格标识(n为1~5,0是默认风格) |
Ctrl-F2 | 收缩展开标签 |
F2 | 跳至下一个标签处 |
Shift-F2 | 跳至上一个标签处 |
4.显示相关
快捷键 | 定义内容 |
---|
Ctrl-(Keypad-/Keypad+)或者Ctrl+鼠标滚轮 | 放大/缩小页面 |
Ctrl-Keypad/ | 回复到原始页面大小 |
F11 | 开关全屏显示(显示标签页) |
F12 | 开关全屏显示(不显示标签页) |
Ctrl-Alt-F | 收缩当前折叠 |
Ctrl-Alt-Shift-F | 展开当前折叠 |
Alt-0 | 收缩所有折叠 |
Alt-(1~8) | 展开相应层折叠 |
Alt-Shift-0 | 展开所有折叠 |
Alt-Shift-(1~8) | 展开所有层次折叠 |
5.运行相关
快捷键 | 定义内容 |
---|
F5 | 打开运行窗口 |
Alt-F1 | 获得PHP帮助 |
Alt-F2 | 用Google搜索 |
Alt-F3 | 用Wiki搜索哦 |
Alt-F5 | 在本标签页中打开当前目录中,与光标位置文本同名的文件 |
Alt-F6 | 在新标签页中打开当前目录中,与光标位置文本同名的文件 |
Ctrl-Alt-Shift-R | 在Chrome中打开 |
Ctrl-Alt-Shift-X | 在Firefox中打开 |
Ctrl-Alt-Shift-I | 在IE中打开 |
Ctrl-Alt-Shift-F | 在Safari中打开 |
Ctrl-Alt-Shift-O | 通过Outlook发送当前文件 |
[转]notepad++
正则表达式替换
字符串详解
表达式说明
\t制表符.
\n新行.
.匹配任意字符.
|匹配表达式左边和右边的字符.例如,ab|bc匹配ab或者bc.
[]匹配列表之中的任何单个字符.例如,[ab]匹配a或者b.[0-9]匹配任意数字.
[^]匹配列表之外的任何单个字符.例如,[^ab]匹配a和b以外的字符.[^0-9]匹配任意非数字字符.
*其左边的字符被匹配任意次(0次,或者多次).例如be*匹配b,be或者bee.
+其左边的字符被匹配至少一次(1次,或者多次).例如be+匹配be或者bee但是不匹配b.
?其左边的字符被匹配0次或者1次.例如be?匹配b或者be但是不匹配bee.
^其右边的表达式被匹配在一行的开始.例如^A仅仅匹配以A开头的行.
仅仅匹配以e结尾的行.
()影响表达式匹配的顺序,并且用作表达式的分组标记.
\转义字符.如果你要使用\本身,则应该使用\\.
例子:
原始串
str[1]abc[991];
str[2]abc[992];
str[11]abc[993];
str[22]abc[994];
str[111]abc[995];
str[222]abc[996];
str[1111]abc[997];
str[2222]abc[999];
目标串:
abc[1];
abc[2];
abc[11];
abc[22];
abc[111];
abc[222];
abc[1111];
abc[2222];
处理:
查找串:str
abc
替换串:abc[\1]
【1】正则表达式应用——替换指定内容到行尾
原始文本如下面两行
abcaaaaa
123abc444
希望每次遇到abc,则替换abc以及其后到行尾的内容为abcefg
即上面的文本最终替换为:
abcefg
123abcefg
解决:
①在替换对话框,查找内容里输入abc.*
②同时勾选正则表达式复选框,然后点击全部替换按钮
其中,符号的含义如下:
.=匹配任意字符
*=匹配0次或更多
注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。
【2】正则表达式应用——数字替换
希望把
asdadas123asdasdas456asdasdasd789asdasd
替换为:
asdadas[123]asdasdas[456]asdasdasd[789]asdasd
在替换对话框里面,勾选正则表达式复选框;
在查找内容里面输入[0-9][0-9][0-9],不含引号
替换为:里面输入[\0\1\2],不含引号
范围为你所操作的范围,然后选择替换即可。
实际上这也是正则表达式的使用特例,[0-9]表示匹配0~9之间的任何特例,同样[a-z]就表示匹配a~z之间的任何特例
上面重复使用了[0-9],表示连续出现的三个数字
\0代表第一个[0-9]对应的原型,\1代表第二个[0-9]对应的原型,依此类推
[、]为单纯的字符,表示添加[或],如果输入其它\0\1\2其它,则替换结果为:
asdadas其它123其它asdasdas其它456其它asdasdasd其它789其它asdasd
功能增强(byjiuk2k):
如果将查找内容[0-9][0-9][0-9]改为[0-9]*[0-9],对应1或123或12345或
大家根据需要定制
相关内容还有很多,可以自己参考正则表达式的语法仔细研究一下
【3】正则表达式应用——删除每一行行尾的指定字符
因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现
比如
123451265345
2345
需要删除每行末尾的345
这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下
解决:
在替换对话框中,启用正则表达式复选框
在查找内容里面输入345表示从行尾匹配
如果从行首匹配,可以用^来实现,不过EditPlus有另一个功能可以很简单的删除行首的字符串
a.选择要操作的行
b.编辑-格式-删除行注释
c.在弹出对话框里面输入要清除的行首字符,确定
【4】正则表达式应用——替换带有半角括号的多行
几百个网页中都有下面一段代码:
\n
在替换对话框启用正则表达式选项,这时就可以完成替换了
【5】正则表达式应用——删除空行
启动EditPlus,打开待处理的文本类型文件。
①、选择查找菜单的替换命令,弹出文本替换对话框。选中正则表达式复选框,表明我们要在查找、替换中使用正则表达式。然后,选中替换范围中的当前文件,表明对当前文件操作。
②、单击查找内容组合框右侧的按钮,出现下拉菜单。
③、下面的操作添加正则表达式,该表达式代表待查找的空行。(技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。
直接在查找中输入正则表达式^[\t]*\n,注意\t前有空格符。
(1)选择从行首开始匹配,查找内容组合框中出现字符^,表示待查找字符串必须出现在文本中一行的行首。
(2)选择字符在范围中,那么在^后会增加一对括号[],当前插入点在括号中。括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。
(3)按一下空格键,添加空格符。空格符是空行的一个组成成分。
(4)选择制表符,添加代表制表符的\t。
(5)移动光标,将当前插入点移到]之后,然后选择匹配0次或更多,该操作会添加星号字符*。星号表示,其前面的括号[]内的空格符或制表符,在一行中出现0个或多个。
(6)选择换行符,插入\n,表示回车符。
④、替换为组合框保持空,表示删除查找到的内容。单击替换按钮逐个行删除空行,或单击全部替换按钮删除全部空行(注意:EditPlus有时存在全部替换不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。
1.在汉化的时候,是否经常碰到这样的语句需要翻译:
Code:
Erroraddingthepost!;
Erroraddingthecomment!;
Erroraddingtheuser!;
如果有很多类似的文件一个一个翻译显然很累而且感觉很无聊。
其实可以这样处理,在Editplus里面用替换功能,在替换对话框选中正则表达式复选框:
查找原文件:
Code:
Erroradding([^!|"|;]*)
替换成:
Code:
在增加\1时发生错误
这样替换之后发生了什么?结果是:
Code:
在增加thepost时发生错误!;
在增加thecomment时发生错误!;
在增加theuser时发生错误!;
ok,接下来你会怎么做?当然再替换一次把thepost、thecomment、theuser替换成你要翻译的词。得到最后的结果:
Code:
在增加帖子时发生错误!;
在增加评论时发生错误!;
在增加用户时发生错误!;
2.要提取的单词在中间,比如:
Code:
cannotbedeletedbecause
cannotbeaddedbecause
cannotbeupdatingbecause
可以用这种方式:
在Editplus里面用替换功能,在替换对话框选中正则表达式复选框:
查找原文件:
Code:
cannotbe([^]*)because
替换成:
Code:
无法被\1因为
这样替换之后发生了什么?结果是:
Code:
无法被deleted因为
无法被added因为
无法被updating因为
其余步骤如上。
在汉化量很大而且句式比较单调的情况下对效率的提高很明显!
解释一下:([^!|"|;]*)的意思是不等于!和和;中的任何一个,意思就是这3个字符之外的所有字符将被选中(替换区域);
\1即被选中的替换区域所在的新位置(复制到这个新位置)。
3.经常手工清理一行一行地删除文本文件里面的空白行,其实可以交给Editplus更好的完成,在Editplus里面用替换功能,在替换对话框选中正则表达式复选框:
查找原文件:
Code:
^[\t]*\n
替换部分为空就可以删除空白行了,执行一下看看:)
abandon[2''b9nd2n]v.抛弃,放弃
abandonment[2''b9nd2nm2nt]n.放弃
abbreviation[2bri:vi''ei62n]n.缩写
abeyance[2''bei2ns]n.缓办,中止
abide[2''baid]v.遵守
ability[2''biliti]n.能力
able[''eibl]adj.有能力的,能干的
abnormal[9b''n0:m2l]adj.反常的,变态的
aboard[2''b0:d]adv.船(车)上
1.
查找:(^[a-zA-Z0-0\-]+)(
+)(.*)
替换:@@@@@\1″,\2″,\3″,
效果:
@@@@@abandon,[2''b9nd2n],v.抛弃,放弃,
@@@@@abandonment,[2''b9nd2nm2nt],n.放弃,
@@@@@abbreviation,[2bri:vi''ei62n],n.缩写,
@@@@@abeyance,[2''bei2ns],n.缓办,中止,
@@@@@abide,[2''baid],v.遵守,
@@@@@ability,[2''biliti],n.能力,
@@@@@able,[''eibl],adj.有能力的,能干的,
@@@@@abnormal,[9b''n0:m2l],adj.反常的,变态的,
@@@@@aboard,[2''b0:d],adv.船(车)上,
2.
查找:\n
替换:
注:要次替换内容为空
效果:
@@@@@abandon,[2''b9nd2n],v.抛弃,放弃,@@@@@abandonment,[2''b9nd2nm2nt],n.放弃,@@@@@abbreviation,[2bri:vi''ei62n],n.缩写,@@@@@abeyance,[2''bei2ns],n.缓办,中止,@@@@@abide,[2''baid],v.遵守,@@@@@ability,[2''biliti],n.能力,@@@@@able,[''eibl],adj.有能力的,能干的,@@@@@abnormal,[9b''n0:m2l],adj.反常的,变态的,@@@@@aboard,[2''b0:d],adv.船(车)上,@@@@@abolish,[2''b0li6],v.废除,取消,@@@@@abolition,[9b2''li62n],n.废除,取消
3.
查找:@@@@@
替换:\n
效果:
abandon,[2''b9nd2n],v.抛弃,放弃,
abandonment,[2''b9nd2nm2nt],n.放弃,
abbreviation,[2bri:vi''ei62n],n.缩写,
abeyance,[2''bei2ns],n.缓办,中止,
abide,[2''baid],v.遵守,
ability,[2''biliti],n.能力,
able,[''eibl],adj.有能力的,能干的,
abnormal,[9b''n0:m2l],adj.反常的,变态的,
aboard,[2''b0:d],adv.船(车)上,
abolish,[2''b0li6],v.废除,取消,
ZenCoding让Notepad++代码书写健步如飞(XMLCSS应用)
Notepad++是一款无比轻巧便捷的代码编辑工具。它无可挑剔的启动速度,优秀的语法高亮,干净整齐的代码缩进,便捷的括号高亮匹配赢得了无数人的喜爱。
但,不知道有多少同学跟我一样,在coding时被Notepad++粗陋的代码自动补全折磨的体无完肤(Notepad++那甚至不能叫自动完成)。虽然无比羡慕诸如Dreamweaver之类的代码自动完成,但固于上述提到的几点Notepad++的优秀之处,纠结中毅然依旧坚守Notepad++。而ZenCoding的横空出世,总算终结了这种纠结,让我们得以以一种无比帅气的方式书写代码。
先看一段演示视频吧(建议反复观摩,其中演示了ZenCoding的各种典型用法)
http://http://v.youku.com/v_show/id_XMTgxNTMzMjI0.html
Notepad++安装ZenCoding
插件下载Zen.Coding-Notepad++.v0.6.1.zip解压
将解压所得的文件放入Notepad++程序的安装目录下的plugins文件夹。
重启Notepad++,即可开始使用ZenCoding。
ZenCoding用法
首先,我们先学习一下ZenCoding的缩写规则(其实就是CSS选择器)
E
元素名(div,p);E#id
带id的元素(div#content,p#intro,span#error);E.class
带class的元素(div.header,p.error.critial).id和class可以连写,如:div#content.column. width;E>N
子元素(div>p,div#footer>p>span);E+N
兄弟元素(h1+p,div#header+div#content+div#footer);E*N
多项元素(ul#nav>li*5>a);E$*N
带序号的元素(ul#nav>li.item-$*5);
接下来,我们来熟悉ZenCodingforNotepad++的快捷键,也是ZenCoding的精髓
【Ctrl+E】展开缩写(ExpandAbbreviation)
比如写下div#page>div.logo+ul>li*3>a
,按一下Ctrl+E,立马就可以转化成:
<divid="page"><divclass="logo"></div><ulid="navigation"><li><ahref=""></a></li><li><ahref=""></a></li><li><ahref=""></a></li></ul></div>
【Ctrl+Shift+A】嵌套代码(WrapwithAbbreviation)
比如,我们想让写好的<p>helloworld</p>
,想在外层再套一个div,只需按下【Ctrl+Shift+A】,在弹出的对话框中输入:div.wrap
,回车。此标签就能自动被嵌套。
甚至,我们可以玩的更炫一些,写好三行列表内容,全裸,此时没有任何标签。只需按下【Ctrl+Shift+A】,输入ul>li*
,回车。这三行内容就能自动被ulli嵌套起来。(不仅限于li列表哦)
【Ctrl+Shift+D】选中代码块(BalanceTagInward/Outward)
选中当前光标所在的代码块,长按可依次选中父块
【Ctrl+Alt+[,Ctrl+Alt+]】转到上一个/下一个编辑点(GotoNext/PreviousEditPoint)
按下可以依次跳到可输入内容的编辑点,省去了不停按方向键或鼠标来定位编辑点的麻烦。
【Ctrl+Alt+M】合并行(MergeLines)
将选中的多行代码合并为一行。压缩css、js代码为一行时,这个很方便。Ctrl+A,然后Ctrl+Alt+M,两下即可搞定,免去了动用压缩工具的麻烦。(当然这个只是简单地将代码合并为一行,并不能做更深入的代码压缩)
【Alt+/】添加、移除注释(ToggleComment)
注释掉光标所在的代码块(Notepad++自带的Ctrl+Shift+Q也可以用来注释代码)
【Ctrl+’】空标签转化(Split/JoinTag)
比如将<divclass="test"></div>
转化为<divclass="test"/>
,反向亦可。
【Ctrl+Shift+’】移除标签(RemoveTag)
比如将<divclass="test">helloworld</div>
移除div标签,留下helloworld。
好了,目前Notepad++的ZenCoding只有这几个快捷键,下面介绍一些常用到的缩写
不知道大家新建一个html页面时,是如何输入文档声明和head那一坨东西的。现在有了ZenCoding,只需输入几个字母就能立马生成相应文档声明的html结构框架
html:4t(HTML4.01Transitional)html:4s(HTML4.01)html:xt(XHTML1.0)html:xs(XHTML1.0Strict)html:xxs(XHTML1.1)html:5(HTML5)
head中常用到的一些缩写
meta:utf,meta:compatstyle,link:css,link:print,link:favicon,link:rss,script,script:src
body中会常用到的缩写
诸如div,p,a,ul,ol,input:t,input:r
等等
其中,类似ul+的形式可展开为(+号可自动生产默认的子元素)
<ul><li></li></ul>
类似的还有ol+,dl+,table+,tr+,select+,map+,optg+
等
IE条件注释:
cc:ie6,cc:ie,cc:noie
下边是一些典型用法示例:
div#name.one.two=><divid="name"class="onetwo"></div>
[title="Helloworld"rel]=><ahref=""=><liclass="item1"></li><liclass="item2"></li><liclass="item3"></li>
li.item$=><liclass="item001"></li>
li.item-$-content*3=><liclass="item-1-content"></li><liclass="item-2-content"></li><liclass="item-3-content"></li>
#content>.section=><divid="content"><divclass="section"></div></div>
如果你写了这么一串出来,那么一个页面的基本结构就出来了:
div#page>(div#header>ul#nav>li*4>a)+(div#page>(h1>span)+p*2)+div#footer
此外【|e】可以输出转义字符
html:4t(HTML4.01Transitional)html:4s(HTML4.01)html:xt(XHTML1.0)html:xs(XHTML1.0Strict)html:xxs(XHTML1.1)html:5(HTML5)
0
div#wrap>div.content>p|e|e
可转化为:
html:4t(HTML4.01Transitional)html:4s(HTML4.01)html:xt(XHTML1.0)html:xs(XHTML1.0Strict)html:xxs(XHTML1.1)html:5(HTML5)
1
以上介绍的仅仅是有关HTML的缩写,CSS的缩写就更多了,建议查看ZenCoding小抄,学习CSS的ZenCoding方式
自己编写缩写规则
plugins\NppScripting\includes\ZenCoding.js
在其中对应位置仿照已有规则添加自己的缩写规则。也可以修改缩写规则更符合自己的习惯。
即使你不编写自己的缩写规则,也强烈建议你阅读此文件,熟悉ZenCoding自带的一些缩写规则,让代码书写更加事半功倍~
最后,ZenCoding不仅有Notepad++版,Aptana、UltraEdit、Dreamweaver也有相应版本,速速前往官方下载页查找是否有你常用的编辑器的ZenCoding插件吧~
——————————————————————————————
Notepad++插件
附带的PluginManager插件
http://www.brotherstone.co.uk/npp/pm/
XMLTools
这个插件是包含了很多XML编辑方面的实用工具。比如XML语法规则检查,XMLSchema和DTD确认,XML标签自动关闭,当前XML路径,XML和Text转换,注释和非注释切换等等。
Insertion
这是一个主要用于演示的插件,适合初次开发者用于实例学习。它的功能是插入当前文档的名称和日期时间,以及自动关闭html/XML标签。
DocUpdater
每三秒自动更新你Notepad++中打开的文档。
TextFx
TextFx是预装在Notepad++中的一个插件,功能非常强大,包括各种代码的转换、插入、优化、格式化和验证等等,能很方便的提高你的工作效率。
SearchInFiles
一个友好的Notepad++文件搜索工具。
QuickText
一个非常出色的代码片段管理器,支持Notepad++所支持的所有语言类型。
Spell-checker
拼写检查工具.需要先安装Aspell。
NppExec
使用NppExec插件,你可以不需要离开Notepad++即可运行你的命令行或保存脚本,大大提高你的效率。
ComparePlugin
一个非常实用的工具,可以用来比较两个文件不同之处.
DBGPplugin
你可以使用这个插件把你的Notepad++变成一个phpIDE。
MultiClipboard
Notepad的剪贴板功能增强插件。
FTP_synchronize
一个集成于Notepad++的FTP客户端。
Gmod10LuaSyntaxHighlighter
Notepad++的一个语法高亮插件。
SpeechPlugin
文本转语音朗诵插件。
Logplugin
这个插件可以让Notepad++实现Windows内置记事本的一个功能:当文件为.log,每次打开后可以附加日期和时间。
下面介绍Notepad++的svn插件的安装及使用。
如图12,点击Plugin-->PluginManager-->ShowPluginManager
打开后,在Available页找到Subversion,然后点击Install,如图13所示:
安装成功后会在Plugins菜单下出现"Subversion"子菜单。
打开之前checkout下来的任一文件,编辑完成后,
点击Plugins-->Subversion-->CommitFile(或使用快捷键Ctrl+Alt+A)
输入LogMessage,点击OK即可提交。