Vim 用引号括起来

Vim 用引号括起来

假设我有以下内容

printf(text goes here);

然后我在可视模式下选择“文本在此处显示”...
我如何快速将其更改为

printf("text goes here");

答案1

这旨在回答您提出的具体问题。您声明您已在视觉上选择了一些文本并希望将其用引号括起来。为此,请运行:

:s/\%V\(.*\)\%V/"\1"/

将其分解成几个部分:

  • :允许您输入ex命令。

  • s/old/new/是通常的替代命令。

  • \%V是一个文档不足的原子,用于标记所选文本的开头

  • \(.*\)选择所有内容并将其保存到选择 1 中。

  • 第二个\%V表示所选文本的结束。

  • 替换文本是所选的所有内容,存储在 中\1,并用引号括起来:"\1"

此命令逐行应用。因此,如果选定的文本跨越多行,您可能会得到不想要的结果。

答案2

你应该进行更多研究。哪些 Vim 命令可用于引用/取消引用单词?

引用:

环绕.vim将是最简单的答案。如果你真的不想使用它,这里有一些你可以做的事情的例子。不一定是最有效的,但这就是编写 around.vim 的原因。

  • 使用单引号引用一个单词 ciw'Ctrl+r"'
    • ciw- 删除光标所在的单词,并进入插入模式。
    • '- 添加第一个引文。
    • Ctrl+r"- 插入寄存器的内容",也就是最后的提取/删除。
    • '- 添加结束语。

  • 取消引用单引号内的单词 di'hPl2x
    • di'- 删除单引号内的单词。
    • hP- 将光标向左移动一个位置(在开头的引语上方),并将刚刚删除的文本放在引语之前。
    • l- 将光标向右移动一个位置(在开头的引语上方)。
    • 2x- 删除两个引号。

  • 将单引号改为双引号 va':s/\%V'\%V/"/g
    • va'- 直观地选择引用的单词和引文。
    • :s/- 开始替换。
    • \%V'\%V- 仅匹配视觉选定区域内的单引号。
    • /"/g- 将它们全部替换为双引号。

答案3

命令序列cw""<ESC>P是可以对文本进行包围的操作,其工作原理是剪切单词(字母数字字符串:az、AZ、0-9,包括 _ [下划线]),然后插入文本"",并按退出键(<ESC>退出插入模式,然后可以在光标前粘贴)。因此,该命令分解为:

c- 切入寄存器

w- 正则表达式匹配 \w

"" -"在当前光标位置插入两个字符

<ESC>- VIM 中按 Esc 键的简写。在此上下文中,返回命令模式

P- 粘贴当前寄存器

但是,如果希望包围当前行上的较长字符串集,则需要使用带有捕获组的替换正则表达式命令,例如:

:s/\(\w\+\)/"\1"/g

此命令将捕获的结果匹配正则表达式存储为组“1”,并执行替换以将该组的内容插入引号中。因此,给定文本:

fubar: 1

变成:

"fubar": 1

vim 简介帮助文件与命令一起是任何人的最佳资源之一:help

答案4

不要使用可视模式。只需将括号中的文本更改为“”,然后将已删除的文本粘贴在中间即可。ci)“”<Esc>

如果你想使用视觉模式,它的工作原理是相同的,你只需删除'i)'部分:c“”<Esc>

<Esc>表示按下 Esc 键)

相关内容