映射VIM关键

问题描述:

我已经试过:映射VIM关键

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

没有运气:(

这里做的事情,抽出当前行到寄存器“ 然后,在全球范围,删除完全匹配的即行。寄存器行 当我做手工它的工作原理花花公子

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

类似 - 我选择了几句,不管是谁 - 我做出选择,然后猛拉它重新gister“。然后,我在全球范围内删除与寄存器中的内容匹配的行。 手动操作时它很有用。

我在做什么错?

+0

嗯 - 我想从做手工做一个简单的地图,就不会工作。原来是Xubuntu,默认不安装VIM - 但六。反正 - 在安装Vim和有东西的工作sorta .......我现在至少在正确的轨道:) – Ziferius 2012-03-01 04:13:20

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

vim --version 

这是我打算的映射。当我浏览日志文件中的大量数据时,这将非常有用。选择你想消除的区域,然后高亮区域的所有实例都完成了。

注意:这确实经过高亮文本和流出的任何正则表达式字符。所以a /,*,^会把它弄脏。

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

:)

你已经重新映射F2到:.y" :。您需要<cr>不是一个简单的空间。如果你在vim中键入:.y"并且没有按ENTER键而是空格,则什么都不会发生。

所以:

: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'的问题。如果你想删除只有一行字

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

对于第二个,像这样:如果你想删除

:vmap <F7> y:silent exe "%s/"[email protected]"."//g"<CR> 

你可以尝试一下本作的第一个匹配线:

:vmap <F7> y:silent exe "g/"[email protected]"."/d"<CR>