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

Методические рекомендации

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

  1. Не используйте клавиши со стрелками и мышь.
  2. Используйте относительный скачок (например: 5k 12j) для вертикального перемещения внутри экрана.
  3. Используйте CTRL-U CTRL-D CTRL-B CTRL-F gg G для вертикального перемещения за пределами экрана.
  4. Используйте слово-движение (w W b B e E ge gE) для перемещения по горизонтали на короткое расстояние.
  5. Используйте f F t T 0 ^ $ , ; для горизонтального движения на средние и большие расстояния.
  6. По возможности используйте operator + motion/text-object (например: ci{ d5j).

Если вы не знакомы с некоторыми из этих концепций, сначала изучите базовые команды vim.

Примеры

Вот 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 и выйдите из режима вставки.

Ситуация

Цель: добавить строку 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>: Измените содержимое внутри '', введите Date и выйдите из режима вставки.

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