gpt4 book ai didi

vim - vim 中可以循环标记吗?

转载 作者:行者123 更新时间:2023-12-03 04:52:11 25 4
gpt4 key购买 nike

我开始使用 [']' 在文件中的标记之间跳转,如下所述:

http://vim.wikia.com/wiki/Using_marks

但是,当我到达文件中的最后一个标记时,这些命令不会回绕到顶部。

当涉及到导航标记时,我搜索了“循环”或“环绕”,但我看到的所有内容都提到了 Ctrl-oCtrl-i 这很好,但是没有回答我的问题。

使用这些快捷方式时是否可以设置从上到下或从下到上换行的选项?

最佳答案

您可以创建一个函数来检查您是否已移动,如果没有,则转到文件开头并再次调用 ]'。像这样:

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

注意:该解决方案不能很好地处理第一行和最后一行的标记,即向后循环时将跳过最后一行的标记,向前循环时将跳过第一行的标记。

关于vim - vim 中可以循环标记吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28163692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com