我开始使用['
和]'
在文件中的标记之间跳转,如下所述:
http://vim.wikia.com/wiki/Using_marks
但是,当我到达文件中的最后一个标记时,这些命令不会回到顶部。
我在搜索导航标记时搜索“骑自行车”或“包裹”,但我看到的所有内容都提到了Ctrl-o
和Ctrl-i
,这很好,但没有回答我的问题。
使用这些快捷方式时,是否可以设置从上到下或从下到上的选项?
答案 0 :(得分:2)
您可以创建一个功能来检查您是否已移动,如果没有,则转到文件的开头并再次呼叫]'
。像这样:
nnoremap ]' :call CycleMarksForward()<cr>
function! CycleMarksForward()
let currentPos = getpos(".")
execute "normal! ]'"
let newPos = getpos(".")
if newPos == currentPos
execute "normal! gg]'"
endif
endfunction
[`
]`
和['
您需要做同样的事情,尽管可能有办法提出通用解决方案。
充实:
nnoremap <silent> ]' :call CycleMarks("]'")<cr>
nnoremap <silent> [' :call CycleMarks("['")<cr>
nnoremap <silent> ]` :call CycleMarks("]`")<cr>
nnoremap <silent> [` :call CycleMarks("[`")<cr>
function! CycleMarks(arg)
let currentPos = getpos(".")
execute "normal! " . a:arg
let newPos = getpos(".")
if newPos == currentPos
if a:arg == "]'" || a:arg == "]`"
execute "normal! gg0" . a:arg
else
execute "normal! G$" . a:arg
endif
endif
endfunction
注意:此解决方案不能很好地处理第一行和最后一行的标记,即向后循环时将跳过最后一行的标记,并且在向前循环时将跳过第一行的标记。