2013-03-29 56 views
3

我正在查看可能有幾個連續相同行的文件。vim跳轉到下一個不同的行

是否有跳轉到下一個不同行的簡單方法?

或者,我希望能夠摺疊所有等於最初顯示摺疊行數的行。

回答

7

你可以定義自己的摺疊EXPR:

第一套FDM:

:set fdm=expr 

然後

:set foldexpr=getline(v:lnum)==#getline(v:lnum-1)?1:0 

現在你可以通過鍵入ž中號測試,以關閉所有摺疊,如果你幸運^ _ ^所有重複的行都摺疊。

你可以鍵入zR打開所有摺疊。

如果它能正常工作,並且您經常打開這些文件,那麼您可以將以上幾行放入.vimrc。(au with ft)中(如果只有一次作業),您可以將模式行寫入該文件。

1

試試這個:

:nmap <F2> "1y$<CR>/^\(<C-R>1$\)\@!<CR> 

它映射F2到:

  • 當前行復制到寄存器搜索1
  • (和移動)不匹配的第一行寄存器1的內容

這似乎工作得很好,除非您的複製行的文本已經逃脫了charac這會混淆搜索正則表達式。這是因爲寄存器1只是被放入搜索表達式而沒有轉義。這對於可靠地修復會非常棘手,但對於普通的日誌文件來說,這應該不是什麼大問題。

另外:如果你不結婚vim和只需要讀取文件的非連續重複的線條,經典UNIX的方法是:

uniq filename 

如果你想在VIM但不會需要更改該文件,請嘗試:

:%!uniq 

(如果嘗試後,一定要退出而不保存)

+0

的第一個想法是很好的。 'uniq'太危險了...如果用戶做了一些改變,然後想跳過dups或跳過dups並想做一些改變.... – Kent