:com[mand][!] [{attr}...] {cmd} {repl}
Define a user command. The name of the command is
{cmd} and its replacement text is {repl}. The
command's attributes (see below) are {attr}. If the
command already exists, an error is reported, unless a
! is specified, in which case the command is
个字符 ......
Special cases
:command-bang :command-bar
:command-register :command-buffer
:command-keepscript
There are some special cases as well:
-bang The command can take a ! modifier (like :q or :w)
-bar The command can be followed by a "|" and another command.
A "|" inside the command argument is not allowed then.
Also checks for a " to start a comment.
5条答案
按热度按时间y4ekin9u1#
了!限定符告诉Vim强制执行操作。例如,如果文件是只读的,你可以使用用途:w!来写入它。如果文件被修改,你想退出而不保存,你可以使用用途:q!。:wq!只是意味着强制写入并在一个命令中退出。
pqwbnv8z2#
在你的例子中,感叹号意味着 * 强制 * 操作(例如,
:w!
将覆盖现有文件,:q!
将退出而不保存)。也就是说,根据命令还有许多其他用途,例如:
:set <option>!
切换布尔选项,例如:set number!
!
后跟一些shell命令,直接从编辑器执行该命令,例如:! ls /etc
:w !cmd
将当前缓冲区的内容传输到命令cmd
,例如:w !sudo tee %
(也称为write with sudo trick)。i86rm4rw3#
除了感叹号强制执行的情况,比如写,它会把一个命令变成一个切换命令。所以如果我这样做:
字符串
光标所在的行将被高亮显示。我可以用以下命令将其关闭:
型
或者我可以这样做:
型
该命令在两个设置(关闭和打开)之间切换。
我经常关闭和打开光标行高亮显示,toggle命令让我通过一个简单的功能键Map来完成。如果没有toggle,我需要两个Map:一个打开它,另一个关闭它。或者我必须编写一个函数来确定光标行设置是打开还是关闭,然后打开相反的设置。
据我所知,这适用于所有具有打开和关闭设置的命令行设置,如hlsearch,paste,cursorcolumn,number,insearch等。
还请注意,感叹号将切换命令的 no 版本。例如,您还可以使用以下命令切换光标行设置:
型
cbeh67ev4#
这真的取决于所考虑的命令。关于你列举的那些,它强制命令,因为其他人已经回答了你。
然而,还有其他命令,如
:global
,:map
,:make
,:silent
,.,其中bang(!
)具有其他效果。阅读他们的文档:字符串
(and我们可以在定义的命令中给予任何我们想要的含义)
f1tvaqid5#
| 例如|意义|
| --|--|
|
:wq!
:q!
|无论如何都要做!||
:autocmd! {group} {event} {pat} cmd
个|覆盖特定的自动命令(:help autocmd-remove*
)||
:function!
个|覆盖现有||
:com[mand][!] [{attr}...] {cmd} {repl}
个|覆盖现有||
:set number!
个|(用1覆盖0,或1 → 0)切换选项||
:!ls
个|shell命令|个字符
......
型
shell
| 例如|意义|
| --|--|
| #!/bin/sh|沙邦|
| 我的天!|最后历史|
| !2|倒数第二历史|
ipython和ptipython
| 例如|意义|
| --|--|
|
:!ls
个|shell命令|