gpt4 book ai didi

Vim 脚本 : find last open parenthese or bracket

转载 作者:行者123 更新时间:2023-12-02 21:15:22 25 4
gpt4 key购买 nike

我想在 vimscript 中编写一个函数,查找一行中最后一个左括号或方括号。这不一定是一个简单的问题,因为它需要能够处理以下所有问题:

function(abc
function(abc, [def
function(abc, [def], "string("
function(abc, [def], "string(", ghi(

如您所见,嵌套括号、不同符号和字符串标记都需要智能处理。这可能吗?是否有带有 vimscript 正则表达式的工具可以进行上下文感知搜索,知道未闭括号和字符串中括号之间的区别?

鉴于您可以在语法上突出显示不平衡的括号,因此应该可以找到一行中最后一个未闭合的括号/括号。如何做到这一点?

最佳答案

因此,基本上,您必须找到不在注释中且不在字符串中的最后一个括号。

我不确定这个语法是什么,所以我将这些行放入缓冲区中并执行了

:set ft=javascript

让字符串突出显示

function(abc
function(abc, [def
function(abc, [def], "string("
function(abc, [def], "string(", ghi(

现在将光标置于第三行左括号并发出以下命令:

:echo synIDattr(synID(line('.'), col('.'), 0), 'name') =~? '\(Comment\|String\)'

它会回显“1”,这意味着光标下的字符在注释中或在字符串中。

如果将光标放在最后一行的最后一列并执行相同的命令,您将得到“0”。

现在您可以向后迭代括号,并根据“注释”和“字符串”测试它们,并获取最后一个左括号。

您可以查看this archive of "LISP: Balance unmatched parentheses in Vim"了解如何使用 vimscript 关闭不匹配的括号。

关于Vim 脚本 : find last open parenthese or bracket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3893585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com