Як vim визначає розмір одного "редагування" при використанні "u" та "CTL-R"?


17

Під час використання uабо CTL-Rскасування чи повторне редагування в vim, я, здається, змінюю шматки тексту, а не лише останній натискання клавіші.

Від чого залежить розмір шматка, який вважається однією редакцією?

Відповіді:


19

Ви шукаєте визначення undo-blocks.

Від :h undo-blocks:

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

Цей самий блок використовується для redo. Від :h redo:

Останні зміни запам’ятовуються. Ви можете скористатися командами скасування та повторення вище, щоб повернути текст таким, яким він був до кожної зміни. Ви також можете застосувати зміни знову, повертаючи текст перед скасуванням.


4
Ви також можете вручну розділити один скасування блоку командою CTRL-G uв режимі вставки, що корисно, якщо у вас є макроси режиму вставки.
fruglemonkey

8

Модальні редагування Vim, часто розглядаються як оператор (наприклад c, d...) застосовується над рухом (наприклад iw, w, }, ...). Як чудовий за продуктом, Vim отримує кучеряві скасування. Якщо в інших редакторах доводиться робити здогадки, щоб зробити багато невеликих скасувань у блоки для скасування, Vim робить це природно. Інший побічний ефект полягає в тому, що це дає вам оператора повторення .(він же називається командою крапки).

У вашому питанні конкретно згадуються натискання клавіш, тому я припускаю, що ви хочете знати, як скасувати невеликі зміни під час вставки. Відповідь - це не "шлях Vim". "Шлях Vim" означає, що ви будете знаходитись у режимі вставки для короткого зйомки одночасно. Це означає, що при допущенні помилок у режимі вставки ви часто просто виходите в звичайний режим і виправляєте текст або просто робите скасування u, і переписуєте текст.

Іноді виникає необхідність розділити блок скасування, перебуваючи у режимі вставки. Це можна здійснити через <c-g>uрежим вставки. Див. :h :undojТа :h undo-blocksдля отримання додаткової інформації.

Для отримання додаткової допомоги пропоную наступне:

:h undo-blocks
:h :undoj
:h undo-tree
:h persistent-undo
:h undo.txt

На цю тему також є кілька скріншотів:


"Корінний скасування" - найкращий опис, який я бачив.
Метт Паркер

6

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

Тому ви можете "зберегти" свої зміни, просто час від часу виходивши з режиму вставки: скажімо, ви переходите до режиму вставки та пишете функцію. Ви можете продовжити кодування та перейти до наступної функції, проте іноді бажано повернутися до звичайного режиму та знову перейти на режим вставки. Таким чином, ви можете структурувати свій код простим способом, і якщо вам потрібно повернутися назад, ви можете знати, в якому положенні ви опинитеся.

Примітка: якщо ви використовуєте стрілки для переміщення, це як якщо б ви натиснули Esc+ [ hjkl]

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