Почему точка (.) Так полезна в VIM? - PullRequest
45 голосов
/ 06 сентября 2011

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

Ответы [ 8 ]

35 голосов
/ 06 сентября 2011

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

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

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

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

13 голосов
/ 06 сентября 2011

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

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

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

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

do_something()
{ 

}

do_another()
{ 

}

third_option()
{ 

}
3 голосов
/ 07 сентября 2011

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

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

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

3 голосов
/ 07 сентября 2011

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

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

3 голосов
/ 07 сентября 2011

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

>%...

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

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

(или что угодно)

2 голосов
/ 06 января 2017

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

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)

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

2 голосов
/ 06 сентября 2011

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

  • dw...
  • dd...

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

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