完整 Vim 配置見:space-vim
jumplist
Vim 可以記錄我們最近訪問的位置(location)。每個位置(position)(position 包括了文件名,列號,行號)會被一個 jump list (跳轉(zhuǎn)表)中,每個窗口(window)都有一個單獨的 jump list,它可以記錄最近 100 個訪問的位置。
像搜索(search), 替換(substitue)和標記(mark)的命令都被認為是一個“jump”(跳轉(zhuǎn)),但是在一個文件中進行滾動并不是一個 jump. 詳見 :h jump-motions
.
之所以了解 jumplist,是因為在看 go 的項目時,經(jīng)常查看代碼的定義(gd
,使用 vim-go 插件),這時就可以使用 Ctrl-I
和 Ctrl-O
進行跳轉(zhuǎn)。看完定義后,Ctrl-O
就可以很快跳回來。
如何使用
使用 :jumps
來顯示當前窗口的 jump list,由于太長,下圖并未顯示完,使用 Vim 的常見快捷鍵進行滾動,j,k,G 等等:
使用 Ctrl-o
跳轉(zhuǎn)到上一個位置,Ctrl-i
跳轉(zhuǎn)到下一個位置。Ctrl-o
和 Ctrl-i
前面也可以加上編號,進行精確跳轉(zhuǎn),這個編號就是上圖中 jump 列的數(shù)字。跳轉(zhuǎn)以后再查看 jump list, 你會發(fā)現(xiàn)有個 >
指示了當前位置,一開始的時候它是在 jump list 的頂部,如果你的 jump list 比較長的話,可能需要拖到底部(快捷鍵 G
)才能看到:
上圖中可以看出,jump 序號為 0 的上下方都是從 1 開始編號,它們分別代表了比當前位置更舊或新的位置。下方是比當前位置新的位置,使用 Ctrl-I
進行跳轉(zhuǎn)。上方是比當前位置舊的位置,使用 Ctrl-O
進行跳轉(zhuǎn):
-
Ctrl-I
會跳轉(zhuǎn)到行號為 0 的下方編號為 1 的位置,也就是1 21 5 type MessageType uint16
. -
Ctrl-O
會跳轉(zhuǎn)到1 420 24 ~/go/src/github.com/lightningnetwork/lnd/fundingmanager_test.go
- 在
Ctrl-I
和Ctrl-O
同樣可以加上數(shù)字跳轉(zhuǎn)到對應位置。比如4
然后Ctrl-I
會跳轉(zhuǎn)到5 14 5 ~/go/src/github.com/lightningnetwork/lnd/lnwire/accept_channel.go
.
簡化操作
前面說了可以使用位置的編號加上 Ctrl-I
或 Ctrl-O
跳轉(zhuǎn)到對應位置,Ctrl-I
或 Ctrl-O
這個操作其實可以省略。比如,輸入 4
向后跳轉(zhuǎn)到第 4 個位置,輸入 +4
向前跳轉(zhuǎn)到第 4 個位置:
function! GotoJump()
jumps
let j = input("Please select your jump: ")
if j != ''
let pattern = '\v\c^\+'
if j =~ pattern
let j = substitute(j, pattern, '', 'g')
execute "normal " . j . "\<c-i>"
else
execute "normal " . j . "\<c-o>"
endif
endif
endfunction
你可以選擇將這個函數(shù)放到你的 .vimrc
中,:call GotoJump()
進行使用。在 space-vim 我將它放在了 util.vim, 可以這樣進行調(diào)用::call spacevim#util#GotoJump()
, 再映射一個快捷鍵就能比較方便地使用了:
nnoremap <Leader>gj :call spacevim#util#GotoJump()<CR>
其實講了這么多,只需要學到 C-i
和 C-o
這兩個快捷鍵就行了,一個是跳轉(zhuǎn)到上一個位置,一個是跳轉(zhuǎn)到下一個位置。再多的內(nèi)容,我也記不住 :).
另外,Vim 的 mark(標記)功能對代碼瀏覽也非常方便,有時間再介紹吧。
參考: