1

我正在尝试导航 C++ 源文件中的所有函数定义,]]如果所有函数都按要求正确缩进,应该没问题,但对于某些源文件可能不是这样,例如命名空间内的函数有额外的缩进。我认为,搜索与当前功能块相同级别的下一个功能块开始符号(例如第二个顶级左括号)将是一个很好的解决方法。是否有这样的命令或扩展可以做到这一点?

4

3 回答 3

3

Vim 作为通用文本编辑器,对各种编程语言没有深入的了解。根据所需的准确性,正则表达式可能已经捕获了最常见的函数定义。然后,您可以使用我的CountJump 插件之类的东西从模式中制作运动映射。

另一个很好的来源是语法突出显示,特别是折叠部分。如果配置:setlocal foldmethod=syntax,则可以使用内置的折叠导航命令(例如zj/ zk)进行导航。

为了获得最佳准确性,您需要一个外部工具,例如ctags解析 C 源代码并确定函数名称。TagBar(已经在评论中提到)和TagList等插件可以帮助您列出和导航。

于 2013-11-14T15:27:37.943 回答
1

TagListTagbar 之类的插件(与 ctags 结合使用)可能会有所帮助,但您可以执行以下操作:

:vim /^\s*\w\+\s\+\w\+\s*(.*)/ % | cw

用当前文件中的每个函数定义填充快速修复窗口。

或者,默认的 python ftplugin 带有一个很好的通用函数和很好的映射,我们可以重新利用它们。将以下行放入~/.vim/after/ftplugin/cpp.vim

function! Custom_jump(motion) range
  let cnt = v:count1
  let save = @/
  mark '
  while cnt > 0
    silent! execute a:motion
    let cnt = cnt - 1
  endwhile
  call histdel('/', -1)
  let @/ = save
endfunction

nnoremap <silent> <buffer> ]] :call Custom_jump('/^\s*\w\+\s\+\w\+\s*(.*)')<cr>
nnoremap <silent> <buffer> [[ :call Custom_jump('?^\s*\w\+\s\+\w\+\s*(.*)')<cr>
于 2013-11-14T16:30:41.037 回答
0

如果您的函数定义遵循以下模式:

<return_type>

function_name (<args>..

或者

<return_type>

function_name(<args>..

使用这个.vimrc

map o :vim /^\w\\+\\_s(\\\\|^\w\\+(/ %\\|cw \<CR>

对于其他函数定义模式,请相应更新,参考:

于 2020-07-19T08:06:09.890 回答