Vim: Как вставить в режиме визуального блока?


154

Как вы можете вставить, когда находитесь в режиме визуального блока (нажав ctrl-V) в Vim?


4
возможный дубликат VIM Blockwise Insert
Коннер

1
БЫСТРЫЙ ИТОГ ОТВЕТА: Я просто изложу здесь ответ в простой форме. Комментариев так много, что эта ветка тонет. 1) Убедитесь, что в вашей версии Vim включен + visualextra, набрав: ver в Vim. 2) Вы вставляете, сначала отмечая материал, который хотите отредактировать, а затем нажимаете I (заглавная i) - строчные буквы я не буду работать. 3) Как только вы это сделаете, это может выглядеть так, как будто вы вставляете только первую строку, но когда вы закончите, нажмите ESC и j, затем текст будет скопирован в другие строки. Вот как это происходит у меня.
Зет

Ответы:


211

Попробуй это

После выбора блока текста нажмите Shift+ iили заглавную I.

Строчные буквы iне работают.

Затем введите то, что вы хотите, и, наконец, чтобы применить это ко всем строкам, Escдважды нажмите .




Если это не сработает ...

Проверьте, +visualextraвключили ли вы в своей версии Vim.

Вы можете сделать это, набрав :verи прокручивая список функций. (Вы можете скопировать и вставить его в буфер и выполнить инкрементный поиск, потому что формат нечетный.)

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


14
Не забывай Aтоже!
jmdeldin

43
Вы также должны нажать escape, чтобы выйти из режима вставки, прежде чем текст будет дублирован.
Brandon Joyce

20
Кто-нибудь видел, чтобы это не работало? У меня есть немодифицированная установка vim на CentOS. Я нажимаю ctrl + v, нажимаю несколько раз j и вижу, как курсор выделяет первый символ из нескольких строк. Нажимаю shift + i. Курсор перемещается к первому символу первой строки, но я вернулся в обычный режим. Я знаю это, потому что если я нажму «a», символ сдвинется вправо и будет написано «- INSERT -». Если я ввожу несколько символов и нажимаю escape, это не применяется к другим строкам.
Тайлер Кольер

2
@TylerCollier У меня проблема с Ubuntu 14.04 в digitalocean. Прокомментируйте, если вы нашли решение.
Зак Берт,

2
@ZacharyBurt По умолчанию vim, установленный с Ubuntu 14.04 (установленный как vi), не включает эту visualextraфункцию, поэтому вставка блока там не работает. sudo apt-get install vimвводит более полнофункциональную версию, на которой visualextraактивируется. @TylerCollier Это может быть та же проблема при установке CentOS: проверьте вывод, vim --versionчтобы увидеть полный список активированных функций.
Габриэль Грант

43
  1. нажмите ctrl и v // начните выбор
  2. нажмите shift и i // затем введите любой текст
  3. нажмите esc esc // нажмите esc дважды

После нажатия ctrl + vвы можете нажать, jчтобы быстро выбрать строку (строки) ниже текущей позиции, или нажать, kчтобы быстро выбрать строку (строки) выше текущей позиции. Вы также можете использовать shiftклавишу с ошибками upили downдля выбора.
tyler.frankenstein

1
Из всех ответов это единственный, который у меня сработал. Я на Mac использую установку brew
Дэниел Каплан

Я жаловался в течение многих лет , что я не мог легко я nsert (например , гр висящий) в блоке выбора. Так что это с большой буквы i, я поражен. Я использовал :normal iINPUT<CR>для ввода в начале строк. Большое спасибо за это!
Тим Виси

Я не думаю, что вам нужно дважды нажимать esc. Если вы нажмете что-нибудь после esc, он автоматически обновит текст. Если нет, он сделает это примерно за полсекунды.
Шахбаз

29

У вас также может быть вариант использования, когда вы хотите удалить блок текста и заменить его.

Как это

Hello World
Hello World

Вы можете выбрать визуальный блок перед "W" и нажать Shift+ i- Тип "Cool" - Hit, ESCа затем удалить "World" путем выбора визуального блока.

В качестве альтернативы, более крутой способ сделать это - просто визуальным блоком выбрать «Мир» в обеих строках. Введите cдля change. Теперь вы в insertрежиме. Вставьте то, что хотите, и нажмите ESC. Оба отражаются с меньшими нажатиями клавиш.

Hello Cool 
Hello Cool

последний шаг полезен для меня, вы должны нажать, ESCтогда во всей отмеченной строке будет отображаться символ, который вы вводите.
Уэбб Лу

отличный материал, это очень помогает
прости

9

если вы хотите добавить новый текст до или после выбранного столбца:

  • нажмите ctrl + v
  • выберите столбцы
  • нажмите shift + i
  • напишите свой текст
  • нажмите esc
  • нажмите "jj"

2
Танцуй, jjраспространение изменений на все строки ниже было последним, что мне не хватало!
kilogic

jjэто убийца!
Anh Tran
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.