Javascript Vim:如果我';我想在里面导航?
我正在尝试编写一些函数,以便在JavaScript源文件中更轻松地移动。我意识到的第一件事是我需要知道我的光标在什么范围内。通过查看Vim的内置函数,我没有看到任何能够自动实现这一点的东西Javascript Vim:如果我';我想在里面导航?,javascript,parsing,vim,Javascript,Parsing,Vim,我正在尝试编写一些函数,以便在JavaScript源文件中更轻松地移动。我意识到的第一件事是我需要知道我的光标在什么范围内。通过查看Vim的内置函数,我没有看到任何能够自动实现这一点的东西 我的问题是,我是否需要像Vim没有范围或块结构的概念一样来处理这个问题?也就是说,找到第一个“{”及其匹配对,将中间的所有内容定义为scopeLevel0,找到下一个”{'和它的匹配对,并称之为scopeLevel1…等等。这对我来说似乎很幼稚,我想知道Vim是否可以允许我自动访问和在块之间导航。不能保证这会
我的问题是,我是否需要像Vim没有范围或块结构的概念一样来处理这个问题?也就是说,找到第一个“{”及其匹配对,将中间的所有内容定义为scopeLevel0,找到下一个”{'和它的匹配对,并称之为scopeLevel1…等等。这对我来说似乎很幼稚,我想知道Vim是否可以允许我自动访问和在块之间导航。不能保证这会解决您的特定问题。但是在Vim中导航源代码时,人们通常使用CTAG。特别是,您可能能够使用 如果您在开始使用CTAG时需要帮助:
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的“范围”概念但是,通过在{
和}分别设置一个标记,您可以将搜索限制在一对{}
中
然后在这些标记之间进行搜索。这不符合我的需要,因为光标会在子对象的属性之间移动。但是,我认为,您最终要做的是尽可能利用光标的移动,这是一个很好的建议。是的,的确如此。在我看来,标记、移动和前向/后向搜索似乎是正确的成为项目最基本的构建块。