运行 ci Vim 中光标下的任何内容

Running ci on whatever is under the cursor in Vim

基本上我想将鼠标悬停在括号或引号之类的东西上,然后当我按下我的键时,命令会自动捕获我光标下的内容 运行 ci 就可以了。

因此,如果我悬停 (,它将 运行 ci(

我真的不知道如何捕获光标下的当前字符并将其传递给映射。我找到了一些命令来查找光标下的字符,但我无法在我的重映射中使用它。 非常感谢ci提供帮助。

首先,您可以使用以下方法获取光标下的字符:

let char_under_cursor=getline('.')[col('.')-1]

下一步,要检查 char_under_cursor 是否是 (,[, {,... 之一,您的映射将做 ci*,您可以考虑使用 <expr> mapping,这里是一个例子:

nnoremap <expr> <F10> getline('.')[col('.')-1] == '('?'ci(' : '\<None>'

这个映射示例(F10)只是检查光标下的字符是否为(,如果是,则ci(,否则,什么都不做。

我想您知道如何检查它了,您可以检查 char 是否与某些正则表达式匹配以涵盖 ],}... 个案例。此外,您可以编写一个包含更复杂逻辑的小函数,并在 <expr> 映射中调用该函数。

祝你好运!

在肯特的帮助下,我设法弄明白了。

这个命令完成了我现在需要的一切。

nnoremap <expr> <leader>f "ci".getline('.')[col('.')-1]

如果您安装并启用插件 wellle/targets.vim,那么您可以简单地使用 ib 文本对象到 select inside any由通常的匹配定界符包围的块。

在您的情况下,( 顶部的 cib 或它内部的任何地方(只要它不在另一个块内)都可以更改该特定块内的内容。

请参阅该插件的自述文件中的 "Any Block"

您还有一个相应的 iq 引号,它会影响 "'` 中的任何一个。该插件在确定哪些引号构成字符串定界符方面也非常聪明,即使您在一行中有多对引号或转义引号也是如此。