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


164

Часто при редактировании кода я выбираю блок в визуальном режиме и выполняю поиск и замену блока. Однако после внесения изменений он покидает визуальный режим. Как вы делаете новую находку и заменяете ту же самую подборку?


Ну, я нашел один способ, но он немного громоздок:: <, '> s / old / new / g Любой способ сделать это без необходимости набирать' <, '>?
Лабиринт

Ответы:


244

Вы можете повторно выбрать последнюю выбранную визуальную область с помощью gv.


4
Потрясающие! @ Не знаю, как найти эту команду самостоятельно без Stackoverflow?
Skywinder

6
@skywinder: help gv
Heptite

4
@Heptite: Я не уверен, что вы тут недоверчивы, но эта команда показывает вам, что: gv сделает, когда вы об этом узнаете. Но что, если я не сделал ? Научите (горе) человека ловить рыбу и все такое.
Бен Тул

@ BenThul: я думаю, что неправильно понял вопрос. Я знаю о многих функциях Vim, просто прочитав большую часть документации с течением времени, начиная с " :help".
Гептит

2
:help select-visualдолжен привести вас к правильному руководству внутри vim @skywinder.

14

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

Допустим, я хочу сохранить выбор моего текущего метода, который идет из строк 25-35. Я могу создать макрос, который выбирает весь метод, набрав

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

Затем я могу вернуть этот выбор, набрав @a(запустить макрос в регистре а). Повторите с любым регистром, строками или секциями линий, которые вы хотите. Очевидно, что если вы вносите изменения в файл, выбор также может измениться, поэтому вы можете рассмотреть возможность использования меток вместо «жесткого кодирования» номеров строк.


zmto введите, что вам нужно знать номера строк. Я думаю, что лучше определить две метки, а затем использовать: 'a,' b, чтобы работать с диапазоном между ними (или заменить '
обратными галочками,

Да, вещь с номерами строк была глупой - я просто использовал это как пример того, как создать макрос выбора. Хотя использование диапазона отметок - интересная идея ...
AlexMA

6

gvотлично работает для восстановления последнего выбора. Но иногда нужно немного больше.

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

VisualMarks позволяет сохранять и восстанавливать визуально выбранные области так же, как вы сохраняете и отмечать определенные места в ваших файлах m. После установки и с параметрами по умолчанию используйте:

ma

в визуальном режиме, чтобы сохранить текущий выбор, чтобы пометить a, затем

<a

в обычном режиме, чтобы вернуться к этому выбору.


Вау, это звучит действительно круто. Я должен попробовать этот плагин! Кстати, могут ли эти VisualMarks сохраняться с mkview, как вы можете с отметками?
Лабиринт

@labyrinth Я не знаю, mkviewно .. я думаю, да, так как оценки сохраняются в отдельном файле и .. Я предлагаю вам попробовать в любом случае :) Если они не сохраняются, как вы хотите, мы будем рады получить вашу функцию запросите на GitHub и попробуйте его обработать.
Яго-Лито

1

Предположим, я хотел заменить Goodbye на Hello, и был выбран код ниже:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

Я бы :s/Goodbye/Hello/набрал и vim заменит все экземпляры GoodbyeсHello

Это просто сочетание регулярных выражений vim и выбора визуального режима. Когда вы выбираете, он должен заполнить автоматически'<,'>


1
Извините, я не об этом спрашивал. Я спрашиваю, как вы повторно используете выделение, чтобы найти и заменить в том же диапазоне, что и ранее?
Лабиринт

1
После замены вы выйдете из визуального режима. введите, gvи ваш визуальный режим вернется к предыдущему состоянию выбора.
Скотт Нгуен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.