Я использую VIM довольно регулярно, но я никогда не использую команду dot (.) для повторения предыдущего действия. Я продолжаю читать о том, насколько это потрясающе, но я никогда не вижу примеров реального мира, которые имеют смысл для меня и того, как я кодирую VIM. Каковы примеры реального мира, которые показывают, насколько удивительна команда точка (.)?
Почему точка (.) Так полезна в VIM?
Ответ 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)
вы бы использовали визуальный выбор блока для левой "позиции" и точки справа.