在状态行中显示功能名称

Man*_*san 35 vim

我编辑一个大的C,C++或Java文件,比如大约15000行,有很长的函数定义,比如大约400行.当光标位于函数定义的中间时,在Vim状态行中查看函数名称会很酷.

当我们:set ls=2在Vim中设置时,我们可以获取文件路径(相对于当前目录),行号等.如果我们也可以看到函数名称,那将非常酷.任何想法如何得到它?

目前我[[用来开始这个功能Ctrl- O回到我正在编辑的那一行.

man*_*m-n 17

要在C程序中 显示当前函数名称,请在vimrc中添加以下内容:

fun! ShowFuncName()
  let lnum = line(".")
  let col = col(".")
  echohl ModeMsg
  echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bW'))
  echohl None
  call search("\\%" . lnum . "l" . "\\%" . col . "c")
endfun
map f :call ShowFuncName() <CR>
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要"f"键,只需将功能映射到您喜欢的任何内容即可.

  • 尝试了大多数其他选择,对我来说,这是最好和最快的.不需要ctags更新,因为我的代码流是几百个文件,每个都是几个10k行. (2认同)
  • `search()` 中的 'n' 标志不会移动光标,因此具有相同功能的较短版本将是:有趣!ShowFuncName() echohl ModeMsg echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bWn')) echohl None endfun map f :call ShowFuncName( ) &lt;CR&gt; 参考:运行`:help search()` (2认同)

Wou*_*r J 12

您可以使用ctags.vim,它将在标题或状态栏中显示当前函数名称.

消息来源:https://superuser.com/questions/279651/how-can-i-make-vim-show-the-current-class-and-method-im-editing


Sol*_*dak 9

基于@manav mn 的回答

'n' 标志search()不会移动光标,因此具有相同功能的较短版本将是:

fun! ShowFuncName()
  echohl ModeMsg
  echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bWn'))
  echohl None
endfun
map f :call ShowFuncName() <CR>
Run Code Online (Sandbox Code Playgroud)

参考:运行 :help search()