Как я могу вставить настоящий символ табуляции в Vim?

Когда у меня есть мой vimrc здесь:

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

И у меня установлен плагин supertab. Всякий раз, когда я нахожусь в режиме вставки, я нажимаю вкладку, она показывает автозаполнение, но иногда я хотел бы вставить реальный символ табуляции в строковый литерал, например. Итак, что я имею в виду, когда я нажимаю вкладку в строковом литерале с двойными кавычками, он должен вводить настоящий символ табуляции.


person Samnang    schedule 05.08.2011    source источник


Ответы (2)


В режиме вставки или командном режиме (подсказка : в нижней части редактора) введите CTRL + V, затем TAB.

Использование CTRL + V сигнализирует Vim, что он должен воспринимать следующий символ буквально. Даже в режиме вставки.

ОБНОВИТЬ:

Как заметил Герберт Ситц, если gVim находится в режиме Windows (по умолчанию), вы должны использовать CRTL + Q вместо CTRL + В.

person Jason Down    schedule 05.08.2011
comment
Вот и все, но в Windows, если в vimrc включена совместимость с Win (что по умолчанию), вам нужно сделать CTRL + Q, затем TAB. - person Herbert Sitz; 07.08.2011
comment
@ Герберт Ситц: Хороший вопрос. Я совсем забыл о режиме Windows для gVim. отмечу и это. - person Jason Down; 07.08.2011
comment
CTRL+Q просто переводит меня в режим визуального блока, поэтому последующая клавиша TAB ничего не делает. Я что-то упустил здесь? Может быть, что-то не так с моей конфигурацией? - person Ben Franklin; 14.03.2016
comment
@BenFranklin Вы должны быть в режиме последней строки (командная строка с : внизу экрана) или в режиме вставки, чтобы CTRL + V (или Q) воспринимал следующий символ буквально. Когда вы находитесь в командном режиме по умолчанию, он переведет вас в блочный режим, как вы заметили. - person Jason Down; 14.03.2016
comment
Не работает для меня - person user32882; 26.06.2021

@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/

Пример: вставить табуляцию в позицию 10 (0-индексированную) в строках 2-4:

1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 

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

1234567890abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890abcdefghij 

Ссылки (StackOverflow):

Ссылки (другие):

person Victoria Stuart    schedule 26.10.2017
comment
решение тоже работает: :1,$s/^(.)/\t\1/ (вставьте табуляцию перед первым символом всех строк) - person Cyryl1972; 08.11.2017