Практический подход к рабочему процессу команд Vim

Практический подход к рабочему процессу команд Vim

17 февраля 2023 г.

В Vim много команд, а это значит, что вы можете достичь одной и той же цели разными способами. Поэтому новичку трудно научиться выполнять задачу редактирования с меньшим количеством нажатий клавиш. В этом руководстве я расскажу о своем рабочем процессе команд Vim и дам вам несколько рекомендаций о том, как эффективно перемещать/редактировать текст в Vim.

Рекомендации

Вот некоторые общие правила моего рабочего процесса.

  1. Не используйте клавиши со стрелками и мышь.
  2. Используйте относительный переход (например: 5k 12j) для вертикального перемещения внутри экрана.
  3. Используйте CTRL-U CTRL-D CTRL-B CTRL-F gg G для вертикального перемещения за пределы экрана.
  4. Используйте словесное движение (w W b e E ge gE) для перемещения по горизонтали на короткие расстояния.
  5. Используйте f F t T 0 ^ $ , ; для горизонтального перемещения на средние и большие расстояния.
  6. По возможности используйте 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>: перейдите в конец строки, введите ; и выйдите из режима вставки.

situation1

Ситуация 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 и выйдите из режима вставки.

situation2

Ситуация 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>: измените содержимое внутри ‘’, введите Дата и выйдите из режима вставки.

situation3

Ситуация 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: вставьте только что удаленный абзац.

situation4

Заключительные слова

Если вы только начинаете изучать операторы Vim и движения, может потребоваться некоторое время, чтобы подумать, какие команды использовать в каждой ситуации. Однако, если вы продолжите практиковать и использовать их, вы будете становиться все быстрее и быстрее. Через некоторое время вы разовьете мышечную память для использования этих команд.

:::информация Также опубликовано здесь.

:::


Оригинал