我试过了:
:map <F2> :.y" :g/<C-R>"/d<CR>
没有运气:(
这是做什么的,把当前的线路打到了注册表“ 然后,全局删除与寄存器中的行完全匹配的行。 当我手动操作时,它会花哨。
:vmap <F2> ["]yy<ESC><ESC> :g/<C-R>"/d<CR>
与上面类似 - 我选择几个单词,无论如何 - 我做出选择,然后将其拉到注册位置。然后我全局删除与寄存器中匹配的行。 当我手动操作时,它会花哨。
我做错了什么?
答案 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>
:)