Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vim状态行中显示当前功能_Vim_Ctags - Fatal编程技术网

在vim状态行中显示当前功能

在vim状态行中显示当前功能,vim,ctags,Vim,Ctags,我花了20%的时间用vim编写代码,几乎完全是javascript和python。 另外80%的时间我主要是上下滚动我的源文件,试图记住我当前正在编辑的函数以及该函数属于哪个类 由于我不理解的原因,这在技术上可能是不可能的,但是是否有任何vim插件允许vim状态行显示当前用于Python和/或Javascript的游标所在的函数 它看起来是这样的: 这可能已经存在于,比如说,升华文本中。如果是这样,我可能最终会停止哭泣,做出改变 某些Vim插件不提供此功能: 更新 自从写了这个问题后,

我花了20%的时间用vim编写代码,几乎完全是javascript和python。 另外80%的时间我主要是上下滚动我的源文件,试图记住我当前正在编辑的函数以及该函数属于哪个类

由于我不理解的原因,这在技术上可能是不可能的,但是是否有任何vim插件允许vim状态行显示当前用于Python和/或Javascript的游标所在的函数

它看起来是这样的:

这可能已经存在于,比如说,升华文本中。如果是这样,我可能最终会停止哭泣,做出改变

某些Vim插件不提供此功能:

更新 自从写了这个问题后,我发现对C做同样的事情的人知道这类信息。但是如何使其显示在Vim状态行中?

您应该尝试基于ctags的。如果您查看该链接上的屏幕截图,您会注意到状态行显示了当前方法的名称,与您要求的完全相同

插件文档解释了如何设置状态行;以下是我在vimrc上使用的配置:

command! -nargs=0 TagbarToggleStatusline call TagbarToggleStatusline()
nnoremap <silent> <c-F12> :TagbarToggleStatusline<CR>
function! TagbarToggleStatusline()
   let tStatusline = '%{exists(''*tagbar#currenttag'')?
            \tagbar#currenttag(''     [%s] '',''''):''''}'
   if stridx(&statusline, tStatusline) != -1
      let &statusline = substitute(&statusline, '\V'.tStatusline, '', '')
   else
      let &statusline = substitute(&statusline, '\ze%=%-', tStatusline, '')
   endif
endfunction
命令-nargs=0 TagbarToggleStatusline调用TagbarToggleStatusline()
nnoremap:TagbarToggleStatusline
功能!TagbarToggleStatusline()
让tStatusline='%{存在('*tagbar#currenttag')?
\tagbar#currenttag(“”[%s]“”,“”):“”
如果stridx(&statusline,tStatusline)!=-1.
let&statusline=替换(&statusline,'\V'.tStatusline,','')
其他的
让&statusline=替换(&statusline,'\ze%=%-',tStatusline,'')
恩迪夫
端功能

由于有时我处理非常大的源文件,并且由于ctags的执行,在大文件之间交换会导致一点延迟,因此我更喜欢通过使用上面定义的映射(Ctrl+F12)或命令来启用和禁用此功能。

而不是在状态行中显示当前方法/类的名称,你可以简单地…跳转到声明并跳回

在Python中:

?def<Esc>
?def
或内置的:

[[<C-o>
[[
在JavaScript中:

?fun<Esc>
?有趣吗
它不需要配置…它不依赖于第三方工具…它与语言无关…它是轻量级的


关于每个函数在特定文件中的位置的元数据由名为的命令行工具收集和存储

Vim插件管理
ctags
调用,以显示当前正在编辑的文档的层次结构

最后,该插件附带了一个扩展名
tagbar
,它允许当前标签(即当前功能的名称)显示在Vim状态行中

通过将此行添加到
.vimrc
,可以将其配置为显示标记的整个层次结构:

let g:airline#extensions#tagbar#flags = 'f'
看起来是这样的:

这个答案的灵感来源于和评论。

和 基于:

vimrc

让g:lightline={
\“活动”:{
\'左':[['模式','粘贴'],['文件名',],['标记栏']]
\ },
\“组件”:{
\“tagbar”:“%{tagbar#currenttag(“%s”、“f”)}”,
\ },
\“组件_函数”:{
\“已修改”:“LightLineModified”,
\“只读”:“LightLineReadonly”,
\'filename':'LightLineFilename',
\“文件格式”:“LightLineFileformat”,
\“文件类型”:“LightLineFiletype”,
\“fileencoding”:“LightLineFileencoding”,
\'mode':'LightLineMode'}
\ }
函数!LightLineModified()
return&ft=~'help'?'':&modified?'+':&modifiable?''-'
端功能
函数!LightLineReadonly()
return&ft!~?'help'&&&readonly?'RO':'
端功能
函数!LightLineFilename()
让fname=展开('%:t')
返回fname='\uuuuu标记栏\uuuu'?g:lightline.fname:
\(“”!=LightLineReadonly()?LightLineReadonly()。“”:“”)。
\(“”!=fname?fname:“[没有名字]”)。
\(“”!=LightLineModified()?“”。LightLineModified():“”)
端功能
函数!LightLineFileformat()
返回winwidth(0)>70?&文件格式:“”
端功能
函数!LightLineFiletype()
返回winwidth(0)>70?(strlen(&filetype)&filetype:'no ft'):“”
端功能
函数!LightLineFileencoding()
返回winwidth(0)>70?(strlen(&fenc)&fenc:&enc):“”
端功能
函数!LightLineMode()
让fname=展开('%:t')
返回fname=='\uuuuuuuuuuuuuuuuuuuuu'?'Tagbar':
\winwidth(0)>60?灯线#模式():“”
端功能
设g:tagbar_status_func='TagbarStatusFunc'
函数!TagbarStatusFunc(当前、排序、fname…)中止
设g:lightline.fname=a:fname
返回灯线#状态线(0)
端功能

只需尝试
[
跳转到函数的第一个大括号,在那里可以看到正在编辑的函数名称;然后键入
CTRL-O
返回。:)

在拆分窗口/标题行中显示上下文 有vim/neovim插件可以自动显示光标的上下文w.r.t.函数/方法/案例

vim插件

neovim TreeSetter插件


看起来你的编辑器比你老了…找一个带有VIM键绑定的新编辑器。@dandavis哈哈!是的,我愿意接受建议…(兴高采烈)ctags实际上支持JavaScript和Python:。您可能只需要为其他文件类型显式启用vim插件。@FelixKling是的!因此,这个问题可能应该归结为:如何让ctags在状态行中显示当前函数?看起来很有希望。@FelixKling说了一句话:如果人们愿意,那就太好了停止推荐未维护的Exubernt
ctags
。改用。它是Exubernt
ctags
的一个积极维护的分支(和后续)。喜欢这个。我太兴奋了