ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Vim 中打开 expandtab 选项时插入制表符

vim

当我处于插入模式并打开 expandtab 选项时,按 Tab ↹ 会插入配置的空格数。

但有时我想插入一个实际的制表符。

你知道怎么做吗?


M
Matthias Braun

您可以在“插入模式”中使用 <CTRL-V><Tab>。在插入模式下,<CTRL-V> 插入下一个字符的文字副本。

如果您需要经常这样做,@Dee`Kej 建议(在评论中)设置 Shift+Tab 以插入具有此映射的真实选项卡:

:inoremap <S-Tab> <C-V><Tab>

此外,正如@feedbackloop 所指出的,在 Windows 上,您可能需要按 <CTRL-Q> 而不是 <CTRL-V>


如果要插入多个选项卡,然后使用 . 重复最后一个命令。
我在使用这种组合时遇到了一些问题,因为我处于命令模式。确保在 EDIT 模式下执行此命令。
注意:如果您在 Windows 上使用 gVim,您可能需要改用 CTRL + Q - 请参阅 stackoverflow.com/questions/6951672/…
对于这种情况,我只是一个简单的快捷方式,它似乎正在工作(没有破坏其他任何东西):inoremap <S-Tab> <C-V><Tab> - 您可以将它放入您的 ~/.vimrc 文件中。
@TriNguyen 很可能您的操作系统正在使用 Shift+Tab 进行其他操作,而 vim 从未看到它。当 vim 处于活动状态时,您可能能够禁用此键绑定,或者只是选择您的操作系统未使用的东西。
J
Jahanzeb Farooq

你可以在 Vim 中禁用 expandtab 选项,如下所示:

:set expandtab!

或者

:set noet

PS:当你完成插入标签时,使用“set expandtab”或“set et”将其设置回来

PS:如果您在 .vimrc (softtabstop) 中设置了相当于 4 个空格的制表符,您可能还希望将其设置为 8 个空格,以便能够通过按一次制表键而不是两次来插入制表符(设置 softtabstop=8 )。


简而言之:set etset noet 根据需要切换 tabspace
Ctrl+V 导致粘贴发生,我没有时间调整键绑定。这有助于
E
Eugene Yarmash

expandtab 上的文档:

要在展开选项卡打开时插入实际选项卡,请使用 CTRL-V。另请参阅 :retab 和 ins-expandtab。此选项在设置粘贴选项时重置,并在重置粘贴选项时恢复。

因此,如果您有切换 paste 选项的映射,例如

set pastetoggle=<F2>

你也可以做<F2>Tab<F2>