VIM键映射无法按预期工作

时间:2012-09-02 20:01:58

标签: vim

我有以下关键地图:

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

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

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

我有类似的关键地图取消注释:

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

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

编辑:

Ha! I found solution.

2 个答案:

答案 0 :(得分:2)

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

  1. 设置视觉选择(线条)并将映射更改为:nmap <F9> :'<,'>s/^/\/\*! /<cr>:'<,'>s/$/ !\*\//<cr>j(并注意您可以在一行上发出更多ex命令,以便将其“缩短”到nmap <F9> :'<,'>s/^/\/\*! /|'<,'>s/$/ !\*\//<cr>j < / LI>
  2. 但我建议使用插件:NERD commenter真的有能力......

答案 1 :(得分:2)

嗯...棘手。这与第一个替换命令转换为范围:.,.+n有关,但第二个命令仅作用于最后一行。我不太清楚为什么会这样,但转换为单一替换可以解决问题。因此,折叠成一个电话,然后整理一点,这有效:

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

(请注意使用!代替/作为模式分隔符。您可以:s使用(几乎)任何字符。/只是默认值。如果你的模式使用了很多/ s,那么使用其他东西并节省一些逃脱是明智的。)