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


163

Часто під час редагування коду я вибираю блок у візуальному режимі і здійснюю пошук та заміну над блоком. Після внесення змін, він залишає візуальний режим. Як ви робите нову знахідку та заміну на один і той же вибір?


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

Відповіді:


243

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


4
Дивовижно! @Heptite, як знайти цю команду самостійно без Stackoverflow?
skywinder

6
@skywinder: help gv
Гептит

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(запустити макрос в регістрі a). Повторіть з будь-яким регістром, рядками або розділами рядків, які вам потрібно. Очевидно, що якщо ви внесете зміни до файлу, вибір може також змінитися, тож ви можете розглянути можливість використання позначок замість номерів рядків "жорстке кодування".


zmто введіть, що вам потрібно знати номери рядків. Я думаю, що краще визначити дві позначки, а потім використовувати: 'a,' b, щоб діяти на діапазоні між ними (або замінити '' backticks, якщо потрібно деталізація в межах рядка)
sillyMunky

Так, річ з номерами рядків була німою - я просто використовував це як приклад, як створити макрос вибору. Хоча використання діапазону марок є цікавою ідеєю ...
AlexMA,

6

gvвідмінно підходить для відновлення останнього виділення. Але одному іноді потрібно трохи більше.

Якщо вам колись потрібні були більш стійкі записи, подивіться цей плагін, над яким ми зараз працюємо на GitHub.

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

ma

у візуальному режимі, щоб зберегти поточний вибір для позначення a, а потім

<a

у звичайному режимі, щоб повернутися до цього вибору.


Нічого собі, це звучить дуже класно. Мені доведеться спробувати цей плагін! До речі, чи можуть ці VisualMarks зберігатися з mkview, як ви можете з позначками?
лабіринт

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

1

Припустимо, я хотів замінити Goodbye на Hello і був обраний код нижче:

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

Я хотів би ввести :s/Goodbye/Hello/і ВІМ замінить всі екземпляри GoodbyeзHello

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


1
Вибачте, це не те, про що я питав. Що я запитую, як ви повторно використовуєте вибір для того, щоб зробити іншу знаходження та заміну в тому ж діапазоні, що і раніше?
лабіринт

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