Поєднання командних послідовностей разом для повторення (.)


10

Поміркуйте:

apple
pear

Поставте курсор на перший рядок і введіть Yp, створюючи:

apple
apple
pear

Поставте курсор на pearрядок і введіть, .щоб повторити останню команду. Це повторює лише p(а не комбінацію Yp), створюючи:

apple
apple
pear
apple

Мені б хотілося сказати .повторити останні N команд. Щось на кшталт 2.повторення комбінації Ypдля отримання:

apple
apple
pear
pear

Ofc це не спрацює - повторюється pдвічі. Але ідеєю було б "повторити послідовність останніх двох команд".

Я знаю, що можу qзаписати послідовності команд і повторити їх @@, але це рішення не є ідеальним, оскільки вимагає, щоб ви планували все заздалегідь, тоді як на практиці ви часто не усвідомлюєте, що потрібно щось повторювати до після ти це зробив.

Чи є спосіб досягти того, що я хочу?

Приз за втіху: Якщо вищезазначене неможливо, чи є спосіб повторити останнє відтворення макросу? Наприклад, якщо я набрав @@для відтворення останнього макросу, я хотів би, щоб наступний .був еквівалентний @@повторному набору тексту - чого це не є (наприклад, якщо результат @@залежить від рядка, на якому ви перебуваєте)


Я не знаю рішення для першої частини вашої проблеми, але для другої частини ви можете спробувати це зіставлення: nno <silent> @@ @@:sil! call repeat#set('@@', v:count1)<CR>Але щоб воно працювало, вам потрібно встановити цей плагін: github.com/tpope/vim-repeat
user9433424

Відповіді:


4

Vim зберігає лише останню виконану команду, і лише те, що повторюється .; на мою думку, будь-що інше було б важко впоратися.

Якщо ви відчуваєте необхідність повторювати Ypкомбінацію як єдине ціле, вам доведеться зробити це однією єдиною командою. Плагін Tim Pope's repeat.vim дозволяє це легко зробити для спеціальних відображень. Звичайно, якщо ви вибрали короткий ключ [послідовність] для відображення, ви можете просто швидко ввести це (замість .) та навіть уникнути інтеграції repe.vim.

До речі, мій плагін LineJuggler надає ]dвідображення для дублювання поточного рядка, і він підтримує повторення через repe.vim.


2

У Yp, єдина «зміна», яку потрібно повторити, - це p. Єдиний спосіб, який я знаю, щоб змінити поведінку .в звичайному режимі - це додати yдо cpoptionsпараметра:

set cpoptions+=y

що дозволяє повторити останню янку, а також останню зміну.

Але це нічого не змінює вашій проблемі, оскільки Ypвсе-таки є дві команди: ривок, що супроводжується зміною.

Я не думаю, що ти можеш отримати те, що ти хочеш, без деяких нетривіальних сценаріїв. Ви подивилися на розділ сценаріїв vim.org ?


1

Я часто використовую mapдля досягнення цього ефекту. Наприклад:

map <F12> Yp

Потім F12кілька разів натискання буде виконуватися YpYpYpі т. Д. Якщо ви хочете перейти до наступного рядка після кожної вставки, Yp+замість цього скопіюйте ключ .


1

Чудова контрацепція, що є плагіном RepeatLast (від власного власного @joeytwiddle ), забезпечує саме цю функціональність за допомогою нечесного методу запису всього, що ви робите як макрос.

Вона забезпечує ряд нових відображень, але, якщо я правильно читав документацію, щоб виконати зміни , які Ви описуєте , ви можете використовувати послідовність команд (припускаючи , що ви використовуєте за замовчуванням <leader>в \):

  • YpДля вирізання і покласти / вставити рядок apple,
  • jПеремістіть лінію вниз, щоб курсор тепер був на pearлінії,
  • \Dзабудь jкоманду,
  • 2\.Повторіть дві команди Yіp

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