vim短途跳轉用easymotion那長途呢?
01-16
vim內短途跳轉用easymotion很方便
但是如果要尋找千行中的某個位置,用什麼方法?我一般是使用 / 搜尋 然後用n來找,還有更效率的方法嗎
對於不確定位置的搜索和跳轉,推薦使用 vimgrep 配合 copen ,這樣的好處是:
- 得到一個結果項清單,你可以通過這個清單直接進行跳轉,也能直接利用清單中列印出來的行號
- 通過目視一次性看到多個結果項,你不需要在正文中頻繁跳轉來查看那些項
用 vimgrep 對當前 buffer 進行查找:
:vimgrep /第d+話/ %
打開 quickfix 窗口:
:copen
然後你就能快速查看所有的結果項和進行跳轉。
詳細了解:
:h vimgrep
:h copen
取決於具體情況。
- 知道行號:123G 或 123gg (123 為行號)。
- 知道內容:/keyword 或 /regexp (regexp 為正則表達式)。
- 知道大概位置:50% (在全文 50% 的位置)。
- 按頁滾動:CTRL-D/U 向下/上滾半頁,CTRL-F/B 向下/上滾整頁。
- 回到上次插入文字的地方:`. 。
- 後退/前進:CTRL-O/I 。
夠用了吧……
-------
@zecy 的答案不是挺好嗎?贊數也多,怎麼那麼下面?
可以用 ctrlp 或 unite 的 line 模式
大文件的話用vimgrep,缺點是多開一個分欄操作,比較麻煩。
不太大的文件(5萬行以內),可以用這個宏:
nnoremap zpr :setlocal foldexpr=(getline(v:lnum)=~@/)?0:(getline(v:lnum-1)=~@/)\|\|(getline(v:lnum+1)=~@/)?1:2 foldmethod=expr foldlevel=0 foldcolumn=2&
用法是,用/號搜索後,按zpr可以把不匹配的部分摺疊起來。然後可以把游標移動到需要的行上,再用zR展開。或者在摺疊部分單獨用zo展開該部分。
如果僅僅是搜索位置,對於vim沒爐火純青的我來說,一般寫個perl小程序模式匹配,列印行數
其他答案已經提及了相對/絕對行數、incremental 搜索以及 marks。我再補充一個:tags。即 ctags 和 CTRL+] 結合。
有一個 script 叫 Taglist 可以給這個方法提供一個很傻瓜的界面。用m做mark,然後用』做跳轉。舉例:命令行模式,在某一行輸入mq,在下次需要到某一行的時候輸入『q。可以直接跳到之前mark的行
裝個tagbar行數/搜索
mark
* 滑鼠對準一個單詞,然後按 * 搜索,
然後按n}{都可以幫你跳推薦閱讀: