如何在Vim中插入真正的制表符?

Sam*_*ang 62 vim configuration supertab

当我在这里使用我的vimrc:

set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
set smarttab
Run Code Online (Sandbox Code Playgroud)

我安装了supertab插件.每当我处于插入模式时,我按Tab键,它会显示自动完成,但有时我想在字符串文字中插入一个真正的制表符.所以我的意思是每当我在双引号字符串文字中按Tab键时,它应该输入一个真正的制表符.

Jas*_*own 108

在插入模式或命令模式下(:编辑器底部的提示),键入CTRL+ V然后TAB.

使用CTRL+ V信号Vim它应该按字面意思取下一个字符.即使在插入模式下.

更新:

正如Herbert Sitz所指出的,如果gVim处于Windows模式(默认),则必须使用CRTL+ Q代替CTRL+ V.

  • 就是这样,但是在 Windows 上,如果在 vimrc 中设置了 Win 兼容性(这是默认设置),您需要先执行 `CTRL` + `Q` 然后执行 `TAB`。 (2认同)

Vic*_*art 8

@Samnang:我有和你类似的设置;不幸的是,杰森的回答对我来说不起作用。

这是一个解决方法:

  • 在您想要制表符的位置替换一些字符(例如反引号:`)或字符(例如唯一的字母数字字符串:zzz)

  • 选择文本(可视模式)并进行搜索/替换,

    :'s/`/\t/g

更新的答案,受到@Cyryl1972 的评论的启发。

要在所有行的开头插入制表符(另请注意:对于以下任何代码,无需选择行,因为它包含在表达式的行匹配部分中):

:1,$s/^/\t\1/
Run Code Online (Sandbox Code Playgroud)

在所有行的前 10 个字符后插入制表符:

:1,$s/^\(.\{10}\)/\1\t/
Run Code Online (Sandbox Code Playgroud)

解释-第一部分:

:1,$      Match from line 1 to end of file
^(.{10}   Collect (preserve) all text from beginning of line to position 10
          (you need to escape the parentheses, \( and \), as well the FIRST
          (left) curly brace, only: \{ -- as it, { , appears to have special
          meaning in regex when used for this purpose
Run Code Online (Sandbox Code Playgroud)

解释-第二部分:

/1        Add back the preserved text
\t        Insert a tab
Run Code Online (Sandbox Code Playgroud)

...线路的其余部分也会自动恢复。

当前行,仅:

:s/^/\t\1/
Run Code Online (Sandbox Code Playgroud)

示例:在第 2-4 行的位置 10(0 索引)处插入制表符:

1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 

:2,4s/^\(.\{10}\)/\1\t/

1234567890abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890abcdefghij 
Run Code Online (Sandbox Code Playgroud)

参考文献(StackOverflow):

参考文献(其他):