Vim:我需要手动解析一种语言,如果我'我试图在导航

Vim: do I need to parse a language manually if I'm trying to navigate within in?

本文关键字:如果 语言 导航 一种 Vim      更新时间:2023-09-26

我想写一些函数,让我在JavaScript源文件中更容易移动。我意识到的第一件事是,我需要知道光标所在的作用域。查看Vim的内置函数,我没有看到任何东西可以自动为我做这些。

我的问题是,我是否需要攻击这个问题,如果Vim没有作用域或块结构的概念?也就是说,找到第一个'{'和它的匹配对,定义之间的一切作为scopeLevel0,找到下一个'{'和它的匹配对,并称之为scopeLevel1…等。这对我来说似乎很天真,我想知道Vim是否可以允许我自动访问和导航块。

你应该说明你想要实现的导航类型。

Vim有作用域的概念,它在您的语言的语法文件中定义。有许多函数显示游标在这里或其他地方的作用域。我在我的。vimrc中的是:

function! SynStack()
    if !exists("*synstack")
        return
    endif
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
nnoremap <C-p> :call SynStack()<CR>

在文档中导航,特别是代码,已经是Vim的一个强大的功能,有文本对象运动,如()[(, [{, ])]}[m]m…参见:help navigation。再加上*#/?或标签等其他动作,你的手指已经有了很大的力量。

你想要更多的粒度吗?

对于更具体的需求,您可能希望定义自己的文本对象。有一个名为textobj-user的脚本专门用于协助完成该任务。使用或不使用此工具创建了许多特殊的文本对象,并在vim.org上提供。

我不能保证这会解决你的问题。但是对于在vim中导航源代码,人们通常使用标签。特别是,您可能能够使用Exuberant标签。

如果你需要帮助开始使用标签:

  • https://superuser.com/questions/305328/gvim-what-is-ctags-and-how-do-i-use-it
  • 在Windows (Vista和XP)上安装Exuberant标签

也可以参考这篇关于如何让它与Javascript很好地配合的文章:

  • http://weblogs.asp.net/george_v_reilly/archive/2009/03/24/exuberant-ctags-and-javascript.aspx