2

我有以下关键地图:

nmap <F9> :s/^/\/\*! /<cr>:s/$/ !\*\//<cr>j

它旨在以 C 风格注释行。当我点击它时<F9>,它工作正常。但是,当我尝试在它前面加上数字(以评论指定的行数)时,它会错过*/除最后一行之外的每一行的右括号。看起来像:

/*! foo1;
/*! foo2;
/*! foo3; !*/

我有类似的键映射来取消注释:

nmap  <F10>   :s/^\/\*! //e<cr>:s/ !\*\/$//e<cr>j

情况类似(不删除右括号)。

编辑:

哈!我找到了解决方案。

4

2 回答 2

2

实际上vim键盘映射通常不支持 lineranges。但是有一些解决方法:

  1. 设置一个视觉选择(行)并将您的映射更改为:(nmap <F9> :'<,'>s/^/\/\*! /<cr>:'<,'>s/$/ !\*\//<cr>j并注意您可以在一行上发出更多 ex 命令,以便您可以将其“缩短”为nmap <F9> :'<,'>s/^/\/\*! /|'<,'>s/$/ !\*\//<cr>j
  2. 但我建议为此使用插件:NERD 评论者真的很有能力......
于 2012-09-02T20:17:40.593 回答
2

嗯...棘手。这与第一个替换命令转换为范围有关:.,.+n,但第二个仅作用于最后一行。我不太确定为什么会这样,但是转换为单个替换可以解决问题。所以,折叠成一个电话,然后稍微整理一下,这行得通:

nnoremap <F9> :s!.*!/* & */!<CR>j

(注意使用 of!而不是/作为模式分隔符。您可以:s与(几乎)任何字符一起使用。/只是默认设置。如果您的模式使用很多/s,使用其他东西并为自己节省一些转义是明智的。)

于 2012-09-02T22:34:16.847 回答