在VIM中映射密钥

时间:2012-02-29 07:05:38

标签: vim

我试过了:

:map <F2> :.y" :g/<C-R>"/d<CR>

没有运气:(

这是做什么的,把当前的线路打到了注册表“ 然后,全局删除与寄存器中的行完全匹配的行。 当我手动操作时,它会花哨。

:vmap <F2> ["]yy<ESC><ESC> :g/<C-R>"/d<CR>

与上面类似 - 我选择几个单词,无论如何 - 我做出选择,然后将其拉到注册位置。然后我全局删除与寄存器中匹配的行。 当我手动操作时,它会花哨。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您可以尝试第一个:

:nnorempa <F2> :silent exe "g/".getline(".")."/d"<CR>

对于第二种,如果你只想删除单词,那就是这样:

:vmap <F7> y:silent exe "%s/".@"."//g"<CR>

如果你想删除匹配的行:

:vmap <F7> y:silent exe "g/".@"."/d"<CR>

答案 1 :(得分:1)

您已将F2重新映射到:.y" : 。您需要<cr>而不是简单的空间。如果你在vim中键入:.y"并且不按空格键,则不会发生任何事情。

所以:

:nnoremap <f2> :.y"<CR>:g/<C-R>"/d<CR>

可以做到。

但是,警告,如果您的行包含任何/\*[~$^.,则可能会失败。您可以使用表达式寄存器来就地转义:

:nnoremap <f2> :.y"<CR>:g/<c-r>=escape(@", '/\*[~$^.')<cr>/d<cr>

更好的是,如果不覆盖默认(")寄存器:

:nnoremap <f2> :g/^<c-r><c-o>=escape(getline('.'), '/\*[~$^.')<CR>$/d<cr>

将删除所有相同的行。仍然需要注意'ignorecase''smartcase'

答案 2 :(得分:0)

首先 - 确保你使用的是vim:)

vim --version

这是我要去的地图。当我在日志文件中浏览大量数据时,这将非常有用。选择要消除的区域,然后完成高亮区域的所有实例。

注意: NOT 通过突出显示的文本并转义任何正则表达式字符。所以a /,*,^会搞砸它。

:map <F2> y:g/<C-R>"/d<CR>

:)