Чи можу я скасувати кілька разів у nvi та / або оригіналі vi?


13

Іноді я перебуваю в системі без Vim, і використовую за замовчуванням nvi(системи BSD) або оригінал vi(Arch Linux).

Існує досить багато відмінностей, але найбільший роздратування полягає в тому, що я можу скасувати лише останню операцію. Натискання uроботи вдруге - це "повтор".

Чи є якийсь спосіб зробити це робочим?

Відповіді:


16

Від nvi(1):

 u       Undo the last change made to the file.  If repeated, the u command
         alternates between these two states.  The . command, when used
         immediately after u, causes the change log to be rolled forward or
         backward, depending on the action of the u command.

Тому натисніть u, а потім продовжуйте натискати, .щоб отримати більше скасування; Якщо натиснути uще раз, він поверне напрямок і натискання .стане повторним.

Я ніколи про це не знав до вчорашнього дня; і думав, що це якось нова функція, але здається, що вона працювала так, принаймні nvi 1,79 з 1996 року .

Це не працює в оригіналі vi ; де скасування документально зафіксовано як:

   u      Undoes the last change made to the current buffer.  If repeated,
          will alternate  between  these  two  states,  thus  is  its  own
          inverse.  When  used after an insert which inserted text on more
          than one line, the lines are saved in the numeric named  buffers
          (3.5).

Це справді складний спосіб сказати, що натискання uще раз повторить ваші зміни.

Що також :help undoговорить Вім (і чому я вважав, що це також не працює nvi):

 u                       Undo [count] changes.  {Vi: only one level}

1

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

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

Наприклад, із наступним текстом, при цьому рядок курсору позначений символом >,

  aaaa
> bbbb
  cccc
  dddd
  eeee

команда dd..призведе до:

  aaaa
> eeee

Якщо ви введете "1P, vi додасть останнє видалення з реєстру "1:

  aaaa
> dddd
  eeee

Натискання .кладе вміст наступного останнього реєстру, виконуючи ці дії "2P, а повторне натискання .додасть вміст реєстру "3.

Отже, коротше кажучи, "P..повернете весь текст, який ви видалили, залишивши вас

  aaaa
> bbbb
  cccc
  dddd
  eeee

Не блискуче, але краще нічого! Більш корисно, ви можете використовувати його на початку або в кінці буфера для швидкого огляду того, що є у ваших нумерованих регістрах. Тоді ви можете легко видалити те, що вам не потрібно.

Це документально підтверджено у vim :help redo-register.


-1

Використовуючи оригінальний vi, натисніть [n] u, щоб повернутися n кроків назад. Поступово повертайтесь крок за кроком ...

  • натисніть [n] u, щоб повернутися на n кроків назад
  • потім натисніть [n] u, щоб повторити n кроків
  • потім натисніть [n + 1] u, щоб повернутися [n + 1] кроки
  • тощо

1
У мене щось близьке до оригіналу vi , і воно, схоже, не повертається n кроків.
muru

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