100

当我在这里有我的 vimrc 时:

set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
set smarttab

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

4

2 回答 2

175

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

使用CTRL+V表示 Vim 应该从字面上获取下一个字符。即使在插入模式下。

更新:

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

于 2011-08-05T05:10:38.243 回答
5

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

这是一种解决方法:

  • 在您想要标签的位置替换一些字符(例如反引号:`)或字符(例如唯一的字母数字字符串:zzz)
  • 选择文本(可视模式)并进行搜索/替换,

    :'s/`/\t/g

更新的答案,灵感来自 @Cyryl1972 的评论。

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

:1,$s/^/\t\1/

所有行中前 10 个字符后的惰性制表符:

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

说明 - 第一部分:

: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

说明 - 第二部分:

/1        Add back the preserved text
\t        Insert a tab

...并且该行的其余部分也会自动恢复。

当前行,仅:

:s/^/\t\1/

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

1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 

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

1234567890abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890abcdefghij 

参考资料(堆栈溢出):

参考文献(其他):

于 2017-10-26T03:05:57.680 回答