2012-02-29 172 views
2

我已經試過:映射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

回答

0

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

vim --version 

這是我打算的映射。當我瀏覽日誌文件中的大量數據時,這將非常有用。選擇你想消除的區域,然後高亮區域的所有實例都完成了。

注意:這確實經過高亮文本和流出的任何正則表達式字符。所以a /,*,^會把它弄髒。

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

:)

1

你已經重新映射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> 

2

你可以嘗試一下本作的第一個匹配線:

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