Як замінити слово на зірване слово у звичайному режимі


25

Коли мені доводиться замінювати слово іншим словом, за яким я раніше забираюсь, я зазвичай використовую робочий процес, який здається мені неприродним:

Скажімо, у мене є цей текст:

foo bar buzz

І я хочу терти fooі замінити barте, що я рив раніше.

Після ридання fooя бачу такі варіанти:

Варіант 1

  1. Помістіть курсор на barсw

  2. Поставте fooперед barсP

  3. Поставте курсор на bрешту barі видаліть слово за допомогоюde

Варіант 2

  1. Покладіть курсор на смужку с w

  2. Використовуйте deдля стиранняbar

  3. Помістіть вміст регістра 0 з "0P(оскільки я стер bar, fooбільше не доступний просто p)

Обидва способи мені здаються надто складними, і я впевнений, що існує більш ефективний спосіб досягти цієї дії, але я не можу знайти як. Ця ідея полягала б у поєднанні дій видалення та введення лише в одному, або принаймні уникнути збереження вилученого слова в реєстрі yank, щоб я міг поставити потрібне слово з простим p.

Також я знаю, що режим заміни спрацьовує, Rале він не дозволяє ставити те, що було пошкоджено.

TL; DR : Як замінити слово змістом регістра yank?

Відповіді:


31

Припускаючи , що ви вже рвонув fooз yeабо що - щось подібне, і що курсор знаходиться десь - то на foo, ви можете використовувати Wvep:

  • Wперейти до bar(це, очевидно, необов’язково і залежатиме від поточного положення курсору);
  • v запустити візуальний режим;
  • eпереходити до кінця слова (ви також можете тут використовувати інші рухи iw);
  • pнаклеїти foo; це замінить поточний візуальний вибір (який заноситься до безіменного реєстру, "").

2
Можливо, вас зацікавлять наступні епізоди vimcast : Вставка з візуального режиму та заміна двох регіонів тексту
обміном.вімом

6

Я знайшов інший спосіб це зробити, він трохи схожий на варіант 2, але він має перевагу в тому, щоб не псувати стан реєстрів.

Ідея полягає у використанні " регістру чорної діри ": Цей реєстр доступний через "_і має особливість того, що ви можете вписати в нього, але не читати з нього, так що, як чорна діра, цей регістр повністю зникає все, що потрапляє в нього. Тут ми можемо використовувати його, щоб він fooзалишався в реєстрі yank навіть після barвидалення.

З цим рішенням робочий потік після ривки fooбуде:

  • Перехід до barз W(або який - або необхідності слово, звичайно)
  • Використовуючи "регістр чорної діри" для видалення за barдопомогою"_de
  • Поставлення fooз реєстру янка с P. Регістр yank все ще містить, fooоскільки barпотрапив у чорну діру.

Я не впевнений, що це краще рішення, ніж той, який вирішив @ Carpersmoker ( В перемозі vimgolf @Carpetsmoker перемагає ), але я не знав про реєстр чорних дір, і я подумав, що хтось може зацікавитись цим.


3
  1. Перейдіть до початку "foo". Натисніть yiw. Це ридає внутрішнє слово.

  2. Перейдіть на «бар», натиснувши букву w. Потім виберіть його і поверніть назад:viw"0p

Я використовую ciwі yiwбагато.


4
Використання подібних текстових об'єктів iwє цікавим, але ваше рішення насправді те саме, що і рішення @ CarpetSmoker: візуально вибравши друге слово і поклавши перше. Я також думаю, що ваше рішення працюватиме з простим, pа не з використанням "0регістру.
statox

1
  • Коли курсор знаходиться де-небудь у слові,

    • yiw- словте слово і зберігайте його в 0регістрі.
  • Перейдіть до цільового слова, яке потрібно замінити

    • ciw видалить слово та переведе вас у режим вставки.
    • ctrl-r. З'явиться "спливаюче запит на запит на реєстрацію.
    • 0 приклеїть вирване слово.

Вилучені слова (як правило!) Зберігаються в 0регістрі. Див. :registersДля перегляду збережених буферів. Це може здатися тривалою процедурою, IMHO це відкриває двері до набагато складніших прийомів реєстрації.

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