在vimrc映射中添加注释

19

(我在超级用户上提出了同样的问题,但意识到那不是适合这个问题的页面)

我正在清理我的.vimrc配置文件,并注意到映射部分由于一些映射具有注释(为了可维护性和将来的参考)而过于稀疏。

问题在于,您无法在与映射相同的行上添加注释,因为它将被解释为右侧的续行符。

当前状态的示例(稀疏):

" Do foo
nmap <Leader>f :foo<Return>

" Do bar
nmap <Leader>b :bar<Return>

期望状态(错误!):

nmap <Leader>f :foo<Return>  " Do foo
nmap <Leader>b :bar<Return>  " Do bar

有没有一种好的方法可以把注释与映射内容放在同一行中?

3个回答

50

你可以使用这种方法,但一定要确保在|之前不要包含空格,因为它将成为映射的一部分:

nmap <Leader>f :foo<Return>|  " Do foo
nmap <Leader>b :bar<Return>|  " Do bar

|vim 中用于分隔命令,因此以上行的工作方式如下:

| 分隔命令,使得命令可以在同一行上执行。

nmap <Leader>f :foo<Return>
" Do foo
nmap <Leader>b :bar<Return>
" Do bar
如果您想在映射本身中使用 | 字符,请参阅 map_bar 的帮助以获取更多信息:

如果您想在映射本身中使用 | 字符,请参阅map_bar的帮助以获取更多信息:

                                                        *map_bar*
Since the '|' character is used to separate a map command from the next
command, you will have to do something special to include  a '|' in {rhs}.
There are three methods:
  use       works when                    example      ~
  <Bar>     '<' is not in 'cpoptions'     :map _l :!ls <Bar> more^M
  \|        'b' is not in 'cpoptions'     :map _l :!ls \| more^M
  ^V|       always, in Vim and Vi         :map _l :!ls ^V| more^M

(here ^V stands for CTRL-V; to get one CTRL-V you have to type it twice; you
cannot use the <> notation "<C-V>" here).

All three work when you use the default setting for 'cpoptions'.

When 'b' is present in 'cpoptions', "\|" will be recognized as a mapping
ending in a '\' and then another command.  This is Vi compatible, but
illogical when compared to other commands.

10
哇,多么巧妙而可怕的黑客攻击。 - romainl
1
我个人认为应该加上一条注释来解释为什么这样做是正确的,因为快速浏览代码会让我觉得映射是错误的。但是添加解释性注释有点违背初衷。 - FDinoff
1
就此而言,:help map-comments 目前说道:"由于 '"' 字符被视为 {lhs}{rhs} 的一部分,因此无法在这些命令之后添加注释。但是,可以使用 |",因为这会启动一个新的、空的命令并带有注释。" 所以我猜至少有文档记录了这个问题... - Phil Gyford

7
不,这是不可能的。
从:help map-comments:
引用: 无法在这些命令后添加注释,因为“"”字符被认为是{lhs}或{rhs}的一部分。

刚在8.0-433上尝试了一下,效果非常好:注释显示在.vimrc文件中,命令按预期工作(至少对于我的简单测试是这样的:noremap<Leader>tt:echo 'message'|"测试注释)。不幸的是,在我想要的:map`列表中并没有显示出注释。 - JESii

0

对于某些命令,内联注释似乎仍然有效,但会发出终端错误声音(因为我猜测"是尝试访问无效寄存器的语法错误,来自:help "

map j gj  " Navigate long lines

我强烈建议将注释放在自己的一行上,或者像其他答案建议的那样,在命令后立即使用|

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接