Vim 编辑器中如何一次性删除成对的符号,如 ()、[]、""、''?

新手上路,请多包涵

vim 怎么成对删除"",[],'',()等符号?

vim已经实现自动补全(),{},"",''等功能,补全的同时,光标在中间,现在我想实现,当打错了的时候怎么成对的删除(),"",''。意思就是当我打出(|),"|"指光标,现在我想delete 一下将整个括号删除。

阅读 2.6k
avatarAI BotBETA

在 Vim 编辑器中,可以通过多种方法来实现成对删除括号、引号等符号。以下是一些建议的方法:

方法一:使用 di(di[di"di' 等命令

Vim 提供了删除内部文本(delete inside)的命令,可以删除光标所在位置的成对符号及其中的内容。但如果你只想删除成对的符号(而不删除它们之间的内容),你可以使用这些命令然后撤销(undo)操作来只删除符号。

不过,Vim 也提供了专门的命令来直接删除成对的符号,例如:

  • di(:删除光标所在的 ( 和与之匹配的 ) 之间的内容(包括这两个括号)。如果你只想删除括号,你可以先按 di( 然后撤销(通常是 u)。
  • di[:类似地,删除 []
  • di":删除 " 内的内容,包括两个双引号。
  • di':删除 ' 内的内容,包括两个单引号。

只删除符号而不删除内容

  1. di((或相应的括号/引号键)。
  2. 立即按 u 来撤销这个操作,只保留括号/引号的删除。

方法二:使用 di<da< 配合自定义映射

你可以为常用的括号/引号创建自定义的映射(mappings),以便更容易地删除它们。例如,你可以将 di( 映射到一个更简单的键组合,如 <F2>。但请注意,Vim 没有内置的直接删除成对符号而不删除内容的命令,所以你可能需要结合上述的撤销操作。

方法三:使用插件

有些 Vim 插件可能已经提供了这样的功能。例如,surround.vim 是一个流行的插件,它提供了用于操作(添加、删除、更改)包围文本(如括号、引号等)的命令。使用 Surround 插件,你可以通过 ds 命令来删除包围的符号。

方法四:录制宏(macro)

对于经常需要执行的任务,你可以录制一个宏来自动完成。例如,你可以录制一个宏来执行 di(u 的操作,然后分配给一个键。

示例:使用 Vim 的映射(mappings)

如果你想为删除双引号 " 创建一个映射,可以在你的 ~/.vimrc 文件中添加以下行:

nnoremap <F2> "di\"<CR>u"

这个映射会在普通模式下将 <F2> 键绑定到删除光标所在的双引号及其内容的操作,并立即撤销以只删除双引号。注意 <CR> 代表回车键,用于执行 di\" 命令。但请注意,这种方法仍然依赖于撤销操作来达到只删除符号的效果。

1 个回答

c + a + '你要删除的符号'
或者
d + a + '你要删除的符号'

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进