Я начал использовать gvim и не совсем понимаю, как работает многострочное редактирование в gvim.
Например:
Оригинальный текст:
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
ctrl + q, jjjjjj, $ все выбрано, затем я нажимаю I, чтобы выполнить многострочную вставку.
Я намерен вставить кавычки, как в первой строке, а затем нажать Esc:
asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
Что произошло? Я ожидал поведения, аналогичного поведению sublimetext:
Если вы не знаете, как это работает, он просто повторяет действия для каждой строки. Как этого добиться? И что здесь делает vim?
vim
sublimetext
text-editor
AlfredoVR
источник
источник
Ответы:
Сделайте себе одолжение, отказавшись от уровня совместимости с Windows.
Обычный ярлык для входа в режим визуального блока -
<C-v>
.Другие занимались записью макросов, вот еще несколько идей:
Использование только режима визуального блока .
Наведите курсор на второе слово:
Нажмите,
<C-v>
чтобы войти в режим визуального блока и разверните свой выбор вниз:Нажмите,
I"<Esc>
чтобы получить:Наведите курсор на последний символ третьего слова:
Нажмите,
<C-v>
чтобы войти в режим визуального блока и разверните свой выбор вниз:Нажмите,
A"<Esc>
чтобы получить:С режимом визуального блока и Surround.vim .
Наведите курсор на второе слово:
Нажмите,
<C-v>
чтобы войти в режим визуального блока и разверните свой выбор вниз и вправо:Нажмите,
S"
чтобы окружить ваш выбор ":С визуально-линейным режимом и
:normal
.Нажмите,
V
чтобы выделить всю строку и развернуть ее вниз:Выполните эту команду:
:'<,'>norm ^wi"<C-v><Esc>eea"<CR>
чтобы получить::norm[al]
позволяет выполнять команды в обычном режиме для ряда строк ('<,'>
часть автоматически добавляется Vim и означает «действовать в выбранной области»)^
помещает курсор на первый символ строкиw
переходит к следующему словуi"
вставляет"
перед курсором<C-v><Esc>
это способ Vim ввести управляющий символ в этом контексте, здесь он<Esc>
используется для выхода из режима вставкиee
переходит в конец следующего словаa"
добавляет"
после курсора<CR>
выполняет командуИспользуя Surround.vim, приведенная выше команда становится
источник
gv
чтобы вернуть ваш предыдущий визуальный выбор, а затем переместиться по горизонтали, возможно, с помощью2e
. (Чем больше строк, тем ценнееgv
!)s
в нормальном режиме, но большойS
в визуальном, поэтому на шаге 3 метода Surround.vim нажатия клавиш должны бытьS"
S"
, а неs"
.
.Это некоторые хорошие готовые решения, приведенные выше, но мы также можем попробовать некоторые плагины, которые предоставляют несколько курсоров, например Sublime.
Думаю, это выглядит многообещающим:
На какое-то время он казался заброшенным, но в 2014 году в него были внесены некоторые изменения.
Он довольно мощный, хотя мне потребовалось некоторое время, чтобы привыкнуть к потоку (который довольно похож на Sublime, но все же модальный, как Vim).
По моему опыту, если у вас установлено много других плагинов, вы можете столкнуться с некоторыми конфликтами!
Есть и другие попытки реализовать эту функцию:
Не стесняйтесь редактировать, если заметите, что какие-либо из них претерпевают улучшения.
источник
В Vim есть несколько способов сделать это. Я не знаю, какие из них больше всего похожи на Sublime Text.
Первый - в режиме многострочной вставки . Поместите курсор на вторую букву «a» в первой строке, нажмите
Ctrl-V
, выберите все строки, затем нажмитеI
и заключите в двойные кавычки. Нажатие<esc>
повторит операцию на каждой строке.Второй - через макросы. Поместите курсор на первый символ и начните запись макроса с помощью
qa
. Перейдите вправо с помощьюllll
, войдите в режим вставки с помощьюa
, поставьте двойные кавычки, выйдите из режима вставки и вернитесь в начало строки с помощью<home>
(или аналогичного). Нажмите,j
чтобы перейти на одну строку вниз. Остановите запись с помощьюq
. А затем воспроизведите макрос с помощью@a
. Несколько раз.Вам подходит какой-либо из вышеперечисленных подходов?
источник
если вы используете «глобальную» команду, вы можете повторить то, что вы можете сделать в одном онлайн-режиме на любом количестве строк.
пример:
Приведенная выше команда находит все строки, в которых есть foo, и заменяет все вхождения bar в этой строке на baz.
буду делать на каждой строчке
источник
:g
команду, описанную здесь. Мне нравится использовать/gc
для запроса «подтверждений», чтобы я мог нажиматьy
илиn
для каждой замены, илиa
для изменения их всех.источник
I
не могу войти в режим вставки, знаете почему это происходит?vim -u NONE
и попробуйте снова выполнить желаемое действие, это может быть какая-то карта или плагин, изменяющий поведение вашего vim.Не знаю, что
vim
происходит, но это интересный эффект. То, как вы описываете то, что вы хотите, больше похоже на работу макросов (:help macro
). Что-то вроде этого будет делать то, что вы хотите с макросами (начиная с нормального режима):qa
: Записать макрос дляa
регистрации.0w
:0
перейти в начало строки,w
перейти на одно слово.i"<Esc>
: Войти в режим вставки, вставить"
и вернуться в нормальный режим.2e
: Переход к концу второго слова.a"<Esc>
: Добавить"
.jq
Перейти к следующей строке и завершить запись макроса.Взяты вместе:
qa0wi"<Esc>2ea"<Esc>
Теперь вы можете выполнить макрос с помощью
@a
, повторить последний макрос с помощью@@
. Чтобы применить к остальной части файла, сделайте что-то вроде того,99@a
что предполагает, что у вас не более 99 строк, выполнение макроса завершится, когда он достигнет конца файла.Вот как добиться желаемого
visual-block-mode
(начиная с обычного режима):visual-block-mode
, выберите строки, на которые вы хотите повлиять,G
чтобы перейти в конец файла.I"<Esc>
."
..
будет достаточно.источник
9999@a
может быть уродливым, но его намного легче набрать,:%norm! @a
и он не запускается повторно в строке, которую вы только что отредактировали. Все равно хорошо это знать. :)Мое решение - использовать эти 2 сопоставления:
Как их использовать:
V12j
<leader>n
<leader>m
Чтобы внести еще одно изменение, вам не нужно делать выбор снова. Просто нажмите
<leader>n
, внесите изменения и нажмите,<leader>m
чтобы применить.Как это работает:
<Esc><Esc>0qq
Выйдите из визуального выделения, перейдите в начало строки и начните запись макроса.q
Остановите запись макроса.:'<,'>-1normal!@q<CR>
От начала визуального выделения до строки перед концом воспроизведите макрос на каждой строке.<Down>
Вернитесь к последней строке.Вы также можете просто сопоставить один и тот же ключ, но для разных режимов:
Хотя это лишает вас возможности сделать еще одно редактирование. Вам придется повторно выбрать свои строки.
источник