Практический подход к рабочему процессу команд Vim
17 февраля 2023 г.В Vim много команд, а это значит, что вы можете достичь одной и той же цели разными способами. Поэтому новичку трудно научиться выполнять задачу редактирования с меньшим количеством нажатий клавиш. В этом руководстве я расскажу о своем рабочем процессе команд Vim и дам вам несколько рекомендаций о том, как эффективно перемещать/редактировать текст в Vim.
Рекомендации
Вот некоторые общие правила моего рабочего процесса.
- Не используйте клавиши со стрелками и мышь.
- Используйте относительный переход (например:
5k 12j
) для вертикального перемещения внутри экрана. - Используйте
CTRL-U CTRL-D CTRL-B CTRL-F gg G
для вертикального перемещения за пределы экрана. - Используйте словесное движение (
w W b e E ge gE
) для перемещения по горизонтали на короткие расстояния. - Используйте
f F t T 0 ^ $ , ;
для горизонтального перемещения на средние и большие расстояния. - По возможности используйте
operator + motion/text-object
(например:ci{ d5j
).
Если вы не знакомы с некоторыми из этих концепций, сначала изучите основные команды vim.< /p>
Примеры
Вот 4 реальных ситуации, с которыми я столкнулся при создании веб-сайта со списком задач с помощью javascript. Вы можете сначала подумать о том, как вы достигнете цели редактирования, а затем увидеть мой подход.
Примечания:
^
илиv
указывает на позицию курсора.- Слева указан номер строки и относительный номер строки.
Ситуация 1
Цель: изменить activeList
на this
и добавить ;
в конце строки.
// current mode: Normal
2 if(this.sortMethod == 'Name') {
1 activeList.uncheckedTodo.sort(sortWithName)
189 }
^
Мой подход таков: -cwthis<ESC>A;<ESC>
.
-
: перейти на 1 строку вверх по первому непустому символуcwthis
: измените слово и введитеthis
.<ESC>
: выйти из режима вставки.A;<ESC>
: перейдите в конец строки, введите;
и выйдите из режима вставки.
Ситуация 2
Цель: заменить i-s+1
на d
и добавить new
до Date(y, m, d)< /код>.
// current mode: Normal
454 console.log(Date(y, m, i-s+1));
^
Мой подход - Wct)d<C-o>FDnew <ESC>
. (<C-o>
означает CTRL-O
)
W
: перейти на одно слово вперед, игнорируя символ.ct)d
: измените до появления)
вправо и введитеd
.<C-o>
: выполнить одну команду в обычном режиме, а затем вернуться в режим вставки.FD
: перейти к вхождениюD
слева.new <ESC>
: введитеnew
и выйдите из режима вставки.
Ситуация 3
Цель: добавить строку activeList.sortMethod = 'Date';
ниже document.querySelector('.sort-date')...
.
// current mode: Insert
1 document.querySelector('.sort-name').addEventListener('click', () => {
343 activeList.sortMethod = 'Name';
1 activeList.update(); ^
2 })
3
4 document.querySelector('.sort-date').addEventListener('click', () => {
5 activeList.update();
6 })
Мой подход таков: <ESC>yy4jpci'Date<ESC>
.
<ESC>
: выйти из режима вставки.yy
: скопировать текущую строку.4j
: перейти на 4 строку вниз.p
: вставьте только что извлеченную строку.ci'Date<ESC>
: измените содержимое внутри ‘’, введитеДата
и выйдите из режима вставки.
Ситуация 4
Цель: переместить весь блок //sort
(строка 200 ~ 207) в начало функции update()
.
// current mode: Normal
8 update() {
7 this.checkedTodo.forEach((todo) => {
6 this.element.insertBefore(todo.element, todoCreator.nextSibling);
5 });
4 this.uncheckedTodo.forEach((todo) => {
3 this.element.insertBefore(todo.element, todoCreator.nextSibling);
2 });
1 v
200 // sort
1 if(this.sortMethod == 'Name') {
2 this.uncheckedTodo.sort(sortWithName);
3 }
4 else if(this.sortMethod == 'Date') {
5 this.uncheckedTodo.sort(sortWithDate);
6 }
7
8 createCalendar(currentYear, currentMonth, this);
9 }
Мой подход - dap8kp
.
dap
: удалить вокруг абзаца.8k
: подняться на 8 строк вверх.p
: вставьте только что удаленный абзац.
Заключительные слова
Если вы только начинаете изучать операторы Vim и движения, может потребоваться некоторое время, чтобы подумать, какие команды использовать в каждой ситуации. Однако, если вы продолжите практиковать и использовать их, вы будете становиться все быстрее и быстрее. Через некоторое время вы разовьете мышечную память для использования этих команд.
:::информация Также опубликовано здесь.
:::
Оригинал