Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Javascript Vim:如果我';我想在里面导航?_Javascript_Parsing_Vim - Fatal编程技术网

Javascript Vim:如果我';我想在里面导航?

Javascript Vim:如果我';我想在里面导航?,javascript,parsing,vim,Javascript,Parsing,Vim,我正在尝试编写一些函数,以便在JavaScript源文件中更轻松地移动。我意识到的第一件事是我需要知道我的光标在什么范围内。通过查看Vim的内置函数,我没有看到任何能够自动实现这一点的东西 我的问题是,我是否需要像Vim没有范围或块结构的概念一样来处理这个问题?也就是说,找到第一个“{”及其匹配对,将中间的所有内容定义为scopeLevel0,找到下一个”{'和它的匹配对,并称之为scopeLevel1…等等。这对我来说似乎很幼稚,我想知道Vim是否可以允许我自动访问和在块之间导航。不能保证这会

我正在尝试编写一些函数,以便在JavaScript源文件中更轻松地移动。我意识到的第一件事是我需要知道我的光标在什么范围内。通过查看Vim的内置函数,我没有看到任何能够自动实现这一点的东西


我的问题是,我是否需要像Vim没有范围或块结构的概念一样来处理这个问题?也就是说,找到第一个“{”及其匹配对,将中间的所有内容定义为scopeLevel0,找到下一个”{'和它的匹配对,并称之为scopeLevel1…等等。这对我来说似乎很幼稚,我想知道Vim是否可以允许我自动访问和在块之间导航。

不能保证这会解决您的特定问题。但是在Vim中导航源代码时,人们通常使用CTAG。特别是,您可能能够使用

如果您在开始使用CTAG时需要帮助:

另请参阅这篇关于如何让它与Javascript配合使用的文章:


您应该解释您想要实现的导航类型

Vim的作用域概念在您的语言的语法文件中定义。有许多函数显示光标在此处和其他位置的作用域。我在my.vimrc中有一个函数:

function! SynStack()
    if !exists("*synstack")
        return
    endif
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
nnoremap <C-p> :call SynStack()<CR>
function!SynStack()
如果!存在(“*synstack”)
返回
恩迪夫
回波图(synstack(line('.')、col('.')、synIDattr(v:val,“name”))
endfunc
nnoremap:调用SynStack()
在文档中导航,特别是在代码中导航,已经是Vim的一大优势,它具有文本对象运动,如
[(
[{
]}
[m
]m
…请参见
:帮助导航
。再加上其他动作,如
*
\

您想要更高的粒度吗


对于更具体的需求,您可能需要定义自己的。有一个脚本名为designed,用于帮助完成该任务。该脚本是使用或不使用该工具创建的,并在vim.org上提供。

我希望能够做的事情是在对象的属性之间循环。我最初的想法是,这将需要一个只需要搜索“someProperty:/*忽略此*/,”的下一个实例。但是,搜索必须限制在我的光标所在的任何范围内,否则它也会在子对象上的属性上跳转。这让我想知道Vim对于我正在编辑的代码有多聪明,我是否需要自己解析文档以确定范围,或者Vim是否已经意识到了这一点。从您的回答来看,这似乎是一个开始是语法文件。对于这个特定的示例,我将使用
/:
搜索下一个
,然后
n
n
从一个属性跳到另一个属性。或者简单地使用TagBar/TagList。我认为Vim不理解JavaScript的“范围”概念但是,通过在
{
}分别设置一个标记,您可以将搜索限制在一对
{}
然后在这些标记之间进行搜索。这不符合我的需要,因为光标会在子对象的属性之间移动。但是,我认为,您最终要做的是尽可能利用光标的移动,这是一个很好的建议。是的,的确如此。在我看来,标记、移动和前向/后向搜索似乎是正确的成为项目最基本的构建块。