导航Vim中的所有C / C ++函数条目

时间:2013-11-14 15:03:28

标签: vim

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

使用当前文件中的每个函数定义填充quickfix窗口。

或者,默认的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>

答案 2 :(得分:0)

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

<return_type>

function_name (<args>..

OR

<return_type>

function_name(<args>..

.vimrc中使用它:

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

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