Подтвердить что ты не робот

Почему точка (.) Так полезна в VIM?

Я использую VIM довольно регулярно, но я никогда не использую команду dot (.) для повторения предыдущего действия. Я продолжаю читать о том, насколько это потрясающе, но я никогда не вижу примеров реального мира, которые имеют смысл для меня и того, как я кодирую VIM. Каковы примеры реального мира, которые показывают, насколько удивительна команда точка (.)?

4b9b3361

Ответ 1

Вот некоторые действия, которые я выполняю с помощью команды dot:

  • Проще чем :%s/\<word\>/replacement/gc есть слово * для слова, затем cereplacement<esc>, а затем повторите n.. Это хорошо, если у вас есть два или три слова вашего слова. Если у вас есть несколько слов, которые вы хотите заменить, перейдите к следующему слову, нажмите * и снова n.
  • Когда я хочу выровнять несколько блоков: <Ctrl-V>jjj<..... или вставить пробелы спереди: <ctrl-v>jjjI<space><esc>....
  • после dd или dw, команда dot удалит другую строку/слово

Волшебная вещь, которая случается с командой dot, состоит в том, что если она повторяет команду, которая использовала нумерованный регистр, она будет использовать следующий нумерованный регистр (см. :help redo-register).

Объяснение: Если вы сделали dd на 9 строках и хотите восстановить их в том порядке, в котором вы их удалили, выполните следующие действия: "1P......... Обратите внимание, что регистры с 1 по 9 являются Vim delete-ring. "1P вставляет перед курсором последний удаленный текст, "2P затем вставляет предыдущий удаленный текст и т.д.

Ответ 2

Я использую dw.... довольно часто, чтобы удалить серию слов, не задумываясь сначала о них. В этом примере 5dw меньше символов, но я думаю, что я примерно на 3 мс быстрее, используя команду dot, чтобы просто повторить delete word по их подсчету.

Изменить Я только что редактировал и понял, что есть другая ситуация, когда я использую команду dot. Я бы предположил, что в Vim существует гораздо более простой способ управления этим типом, но команда dot помогает в следующих и подобных ситуациях. Ниже приведен пример "Я сделал что-то один раз, теперь я хочу повторить его еще несколько раз". Я писал новый тест (в C) и ему нужно было встроить в него строковую константу, представляющую SQL script, которую я скопировал из другого места. Оригинальная многострочная (7 строка) script не была заключена в двойные кавычки, поэтому я сделал это:

  • Вставьте script непосредственно в код (7 новых строк в файле).
  • Поместите курсор на первую новую строку.
  • I space space space space " esc, чтобы вставить пробелы и начальную цитату в текущей строке.
  • j . шесть раз, чтобы добавить стартовую цитату для каждой дополнительной строки.
  • Переместить в первую строку вложенного текста.
  • A \ n " esc, чтобы поместить символ линии и закрытие цитаты в текущей строке.
  • j . шесть раз, чтобы поставить заключительную цитату на оставшиеся строки.

Ответ 3

do_something();
do_another();
third_option();

Теперь с курсором в первой строке: A<bs><cr>{<cr><cr>}<cr><esc>. Теперь нажмите jj и

do_something()
{ 

}

do_another()
{ 

}

third_option()
{ 

}

Ответ 4

Мои наиболее распространенные примеры - изменение уровня отступа текста

>%...

или просто повторить конкретное изменение текста, например, вставить (char *) перед несколькими переменными:

i(char *)<Esc>jjjwwww.jjjbb.

(или что-то еще)

Ответ 5

Все остальные ответы дают хорошие примеры, я просто хочу добавить, что dot отлично, потому что это автоматический макрос для вашей последней комбинации клавиш, которая находится всего в одном ключе.

В то время как макрос отлично, они немного громоздки для использования, тогда как dot всегда доступен, даже если он менее мощный.

Ответ 6

Для меня точка-точка была поражена или пропущена сначала, пока я не начал записывать макросы с любой частотой. Трюк для записи полезных макросов заключается в том, чтобы представить проблему как повторяемые шаги. Иногда точка - это единственное, что будет делать или, по крайней мере, делает проблему намного проще.

Кроме того, использование команды dot заставит вас использовать определенные команды, которые вам, возможно, еще не нужны, например: cw ct; ci "ca), поскольку они сворачивают удаление/изменение текста в одно" действие ", которое повторяется точкой.

Кроме того, помимо точки есть также; который я использую гораздо реже, но когда я делаю его очень полезный, который повторяет последнее текстовое движение. Не так полезно для таких вещей, как w и b, но для таких вещей, как f; его хороший маленький трюк.

Ответ 7

Как и предыдущий плакат, я часто использую его при удалении:

  • dw...
  • dd...

И при повторении действия на нескольких строках:

  • iSomeText:[Esc]j.j.j.

Ответ 8

Когда вам нужно преобразовать это:

instance Movable Position where
    (x,y) --> Left  = (x-1,y)
    (x,y) --> Right = (x+1,y)
    (x,y) --> Up    = (x,y-1)
    (x,y) --> Down  = (x,y+1)

в это:

instance Movable Position where
    Position(x,y) --> Left  = Position(x-1,y)
    Position(x,y) --> Right = Position(x+1,y)
    Position(x,y) --> Up    = Position(x,y-1)
    Position(x,y) --> Down  = Position(x,y+1)

вы бы использовали визуальный выбор блока для левой "позиции" и точки справа.