Практический подход к рабочему процессу команд 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 и движения, может потребоваться некоторое время, чтобы подумать, какие команды использовать в каждой ситуации. Однако, если вы продолжите практиковать и использовать их, вы будете становиться все быстрее и быстрее. Через некоторое время вы разовьете мышечную память для использования этих команд.
:::информация Также опубликовано здесь.
:::
Оригинал