Простые команды Vim, которые вы хотели бы знать раньше [закрыто]

378

Я постоянно изучаю новые команды в Vim, но уверен, что все время от времени узнают что-то новое. Я только недавно узнал об этом:

zz, zt, zb - позиционировать курсор в середине, вверху или внизу экрана

Какие еще полезные или элегантные команды вы бы хотели выучить давным-давно?

Лин
источник
46
технически zz, zt, zb позиционируют экран с курсором в середине / верху / низу. чтобы поместить курсор в середину / верх / низ, используйте M, H или L. Оба набора команд полезны!
Питер
1
Чтение этого поста несколько месяцев или год назад помогало мне каждый день. Благодаря этому посту я использую dap для перемещения абзацев несколько раз в час.
Funkodebat
33
Я никогда не брал столько уловок со страницы, которая была помечена как неконструктивная :) Спасибо всем.
Tasos Bitsios

Ответы:

315

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

yalestar
источник
93
Я переназначил свой Caps-Lock в Esc. Это и проще, чем обычный Esc и Ctrl-C
Каспер
114
Святое дерьмо. 15 лет ви, и я никогда не знал этого ...
Крис К
31
Другой популярный способ - использовать JJ для ESC. Мне нравится этот подход до сих пор. :карта! JJ <ESC>
Клейтрон
27
Вы также можете использовать CTRL- [(что мне нравится, потому что это оба мизинца ... просто небольшое вращение обеих рук).
Джейсон Даун
42
используйте 'jk' как вариант на @ claytron's. если вы по незнанию уже находитесь в режиме INSERT, jk оставляет вас там, где вы были, так что вы можете нажать его в любое время (кредит: кто-то другой ... не моя идея).
Кайл
197

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

:set incsearch             " I have this in .vimrc
/my complicated regexp     " Highlighted as you enter characters
:%s//replace with this/    " You don't have to type it again

«Уловка» здесь (при отсутствии лучшего слова) - это способ, которым вы можете использовать поиск для создания регулярного выражения (и «incsearch» выделяет его при вводе символов), а затем использовать пустой шаблон в подстановке: пустой шаблон по умолчанию соответствует последнему шаблону поиска.

Пример:

/blue\(\d\+\)
:%s//red\1/

Эквивалентно:

:%s/blue\(\d\+\)/red\1/

Видеть:

:help 'incsearch'
:help :substitute
Dral
источник
1
вау ... я искал что-то вроде этого
figurassa
1
да, я хотел бы, чтобы я знал об этом раньше. Но опять же, это то, что я говорю обо всем, что узнаю, что является новым в vim.
Роберт Массайоли
26
Для тех, кто действительно любит это, попробуйте <Ctrl-R>/вставить последний поисковый запрос. (См. :help i_CTRL-R) Действительно полезно для аналогичных выше, но вы хотите захватить часть результатов поиска. (как это: %s:/\\([fF]rank\\) and mary/marie and \1/g)
idbrii
4
:%s//...также работает с *(поиск слова под курсором). Плагин Visual-Star-Search расширяет функциональные возможности, *чтобы соответствовать всему тексту визуального выделения, что позволяет легко искать и заменять выбранный текст, например v3e(визуально выбрать 3 слова) *(поиск) и :%s//replacement/g(заменить все вхождения на " замена "). Я использую это так часто , что у меня есть отображение для глобальной команды подстановки: :nmap <Leader>s :%s///g<left><left>.
Патрик Осцити
1
@idbrii, так как люди, которые читают, могут быть Vim noobs (я), так и %s:должно быть :%s, и для моей системы мне нужно было \(\)вместо этого\\(\\)
Чарли
155

Я создал эту ссылку моей наиболее часто используемой команды для моего друга:

select                                   v
select row(s)                            SHIFT + v
select blocks (columns)                  CTRL  + v
indent selected text                     >
unindent selected text                   <
list buffers                             :ls
open buffer                              :bN (N = buffer number)
print                                    :hardcopy
open a file                              :e /path/to/file.txt
                                         :e C:\Path\To\File.txt
sort selected rows                       :sort
search for word under cursor             *
open file under cursor                   gf
  (absolute path or relative)
format selected code                     =
select contents of entire file           ggVG
convert selected text to uppercase       U
convert selected text to lowercase       u
invert case of selected text             ~
convert tabs to spaces                   :retab
start recording a macro                  qX (X = key to assign macro to)
stop recording a macro                   q
playback macro                           @X (X = key macro was assigned to)
replay previously played macro *         @@
auto-complete a word you are typing **   CTRL + n
bookmark current place in file           mX (X = key to assign bookmark to)
jump to bookmark                         `X (X = key bookmark was assigned to
                                             ` = back tick/tilde key)
show all bookmarks                       :marks
delete a bookmark                        :delm X (X = key bookmark to delete)
delete all bookmarks                     :delm!
split screen horizontally                :split
split screen vertically                  :vsplit
navigating split screens                 CTRL + w + j = move down a screen
                                         CTRL + w + k = move up a screen
                                         CTRL + w + h = move left a screen
                                         CTRL + w + l = move right a screen
close all other split screens            :only

*  - As with other commands in vi, you can playback a macro any number of times.
     The following command would playback the macro assigned to the key `w' 100
     times: 100@w

** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.
Брайан Ньюман
источник
Вы перечисляете "~ X", чтобы перейти к отметке с именем X. Это не работает для меня - вместо этого я использую "'X" (одинарная кавычка).
Ух ты. Вы абсолютно правы. Когда я печатал путеводитель, мне показалось, что мой глаз видел только тильду и мелькнул на спине. Я буду обновлять соответственно. Спасибо за внимание.
Брайан Ньюман
5
этот список хорош, но я действительно хочу знать, как вы нарисовали эту таблицу? с VIM? какой плагин? Я ищу один в настоящее время.
Кент
6
Я использовал VIM, но не плагин. Однако; Использование функции выбора блока сделало это относительно простым. Рад, что вы нашли этот список полезным! ~ Брайан
Брайан Ньюман
11
Ctrl-Q для выделения блоков - это особенность mswin.vim, которая позволяет вставлять CTRL-V. Большинство пользователей vim считают это зло и отключают mswin.vim. "+ P или Ctrl-R + не так сложно набрать, чтобы вставить содержимое буфера обмена.
Бенуа
144

gi переключается в режим вставки, помещая курсор в то же положение, в котором он находился ранее.

Cyber ​​Oliveira
источник
29
Я был так счастлив, когда узнал о том, что g;сейчас это
вызывает у
@ longdeqidao совсем нет. Возвращается к последней точке вставки. Таким образом, вы можете прокрутить содержимое своего сердца, и оно вернет вас туда, где вы в последний раз вставляли.
Кибер Оливейра
9
К вашему сведению, г; (который @PatrickOscity упоминается выше) помещает курсор в то место, где было выполнено редактирование. Вы можете использовать его несколько раз, чтобы вернуться в историю. Отметив это здесь, потому что моя справка vim не упоминает об этом по какой-то странной причине.
PonyEars
13
Интуитивность Вима не перестает меня удивлять. Так как @PonyEars упомянул, g;я попытался, если "противоположность" этого будет, g,и вот, мы можем идти вперед и назад!
Кибер Оливейра
aкороче :) Но giна самом деле это очень интуитивно понятно, gобычно это противоположная операция.
Эрвин Ройяккерс
105
: Д!

Хотелось бы, чтобы я знал это до того, как впервые запустил vi.

Peter Mortensen
источник
23
как парень из Emacs, это самый забавный комментарий, который я прочитал. не уверен, что вы имели в виду, хотя. Вы сделали меня счастливым сегодня.
Пьяммер
29
Я помню, как впервые попробовал vim и emacs в один и тот же день, не зная, как выйти. Я подумал про себя, что, черт возьми, не так с этими людьми !?
физика Майкл
13
+1. При первом запуске vim сообщением по умолчанию должно быть «write: q to quit». Я бы сэкономил столько времени лол
Хосе Рамон
2
@ JoséRamón Но это действительно показать его на экране по умолчанию , если вы вводите ВИМ без открытия файла. Это было добавлено недавно? Я хорошо помню, как пытался vim много лет назад, и это было уже там. Он также говорит вам использовать, :q!если вы пытаетесь выйти без сохранения буфера.
mechalynx
5
@ivy_lynx да, вы можете быть правы, но только если вы открываете vim без файлов. Обычно первый раз, когда вы открываете vim, вам нужно отредактировать файл конфигурации в Unix, чтобы вы написали «$ vim file» и не могли найти выход. Или я один такой?
Хосе Рамон
56

^ XF завершает использование имен файлов из текущего каталога. Нет больше копирования / вставки из терминала или болезненной двойной проверки.

^ XP завершает использование слов в текущем файле

: set scrollbind заставляет один буфер прокручиваться рядом с другим. например, разбить окно на две вертикальные панели. Загрузите один файл в каждом (возможно, разные версии одного и того же файла). Делай :set scrollbindв каждом. Теперь, когда вы прокрутите одну, обе панели будут прокручиваться вместе. Идеально подходит для сравнения файлов.

Брайан Агнью
источник
Как отключить скроллбинд после включения?
Амжит
2
jinxed_coder : :set noscbвыключить и использовать, :set scbчтобы включить (не :scrollbind). :h scrollbind
Джмделдин
Упс. Исправлено для ': set scrollbind'.
Брайан Агнью
7
^ XP завершается с предпочтением к предыдущим словам в файле, ^ XN с предпочтением к следующим словам в файле.
u0b34a0f6ae
Вы также можете различать файлы, открыв file1 и запустив :diffsplit file2или просто запустив vim vim -d file1 file2. Vim автоматически связывает два файла.
Брайан Маккатон
51

Вы можете использовать целый набор команд для изменения текста в скобках / скобках / кавычках / тегах. Очень полезно избегать необходимости искать начало и конец группы. Пытатьсяci(, ci{, ci<, ci", ci', ct зависимости от того, какой объект вы хотите изменить. И ca(, ca{, ...варианты удаляют также скобки / кавычки.

Легко запомнить: изменить внутри выражения в скобках / изменить выражение в скобках.

Peter
источник
16
это не только для c. Вы можете сделать это, dчтобы удалить (например, di (или da (), yчтобы восстановить, vвыбрать и т. Д.)
Натан Феллман,
Здравствуйте! Я хотел бы знать, есть ли документация для этого :help? Я не могу найти это нигде. > _ <
Матей
1
@Peter Я проверял это раньше, но не смог найти упоминания об особом поведении «inner + delimiter». Оказывается, в :help motion.txt! Спасибо!
Matej
2
этот совет - единственная причина, почему я переключился на vi в первую очередь :)
Джастин Л.
1
Если вы редактируете HTML или XML, вы можете использовать citдля изменения содержимого текущего тега. Например, в <span>Some text</span>, если ваш курсор находится над «m», вы можете сделать, ditчтобы получить <span></span>.
Джонатан Поттер
47
  1. Не нажимай Escникогда. Посмотрите этот ответ, чтобы узнать почему . Как упоминалось выше, Ctrl+ Cявляется лучшей альтернативой. Я настоятельно рекомендую сопоставить ваш Caps Lockключ, чтобы сбежать.

  2. Если вы редактируете Ctags совместимый язык, используя файл тегов и :ta, Ctrl+ ]и т.д. это отличный способ навигации код, даже в нескольких файлах. Кроме того, Ctrl+ Nи Ctrl+ Pзавершение с использованием файла тегов - отличный способ сократить количество нажатий клавиш.

  3. Если вы редактируете строку, которая обернута, потому что она шире, чем ваш буфер, вы можете перемещаться вверх / вниз с помощью gk и gj.

  4. Постарайтесь сосредоточиться на эффективном использовании команд движения, прежде чем выучите вредные привычки. Такие вещи, как использование «dt» или «d3w» вместо нажатия «xa» несколько раз. По сути, всякий раз, когда вы обнаруживаете, что нажимаете одну и ту же клавишу несколько раз, возможно, есть лучший, более быстрый, более лаконичный способ выполнить то же самое.

Энтони
источник
11
Не использовать Escape? Это ересь Побег ваш лучший друг, как на работе, так и вне ее.
xcramps
28
если это такой хороший друг, почему он так далеко от клавиатуры?
Энтони
потому что 99% людей никогда не используют это.
Стефано Борини
5
Клавиша Escape отделена от других клавиш несколькими дюймами на моей клавиатуре. Вы не можете пропустить это.
Брайан Карпер
15
№ 3 это здорово! Все еще учусь новым вещам ...
Брайан Ньюман
45

Звездочка,, *будет искать слово под курсором.

[+ Tabприведет вас к определению функции C, которая находится под вашим курсором. (Хотя это не всегда работает.)

smcameron
источник
1
Попробуйте 'man ctags', если вы используете * nix, чтобы узнать, как сгенерировать файл "tags", который сообщает vim, как найти определение любой функции или переменной во многих языках в дополнение к C. Используйте ctrl +], чтобы найти определение токена под вашим курсором, или используйте: tag tokenToFind, чтобы найти любой токен, о котором он знает. Вы даже можете запустить vim с помощью «vim -t tokenToFind», чтобы открыть соответствующий файл и установить курсор на функцию, которую нужно отредактировать.
Адам Лисс
23
клавиша # будет искать слово под курсором в обратном направлении
Funkodebat
github.com/bronson/vim-visual-star-search включает поиск по звездам по визуальному выбору. Я не хочу пропустить это больше.
Патрик Осцити
[ + Tab будет работать всегда, когда вы расширяете pathнеобходимые папки, такие какset path+=path/to/files
dlmeetei
43

ZZ (работает как :wq )

И о позиции курсора: я обнаружил, что курсор, который всегда остается в середине экрана, это круто -

set scrolloff=9999
майкей
источник
2
Не знал этого. :xделает это также
sa125
18
Не совсем точно. Работает как :x, который только сохраняет файл, если есть изменения, тогда как :wqвсегда сохраняет файл.
Эрик Б
ZQ (работает как: q!)
xialu
42

Некоторые из моих последних дополнений в мой мозговой магазин Vim:

  • ^wi: Перейти к тегу под курсором, разделив окно.
  • cib/ciB: Изменить текст внутри текущего набора скобок () или фигурных скобок {} соответственно.
  • :set listchars=tab:>-,trail:_ list: Показать вкладки / пробелы, визуально отличающиеся от других пробелов. Это очень помогает с кодированием Python.
Вальтер
источник
4
Это требует больше голосов! cibотлично.
Мэтт Паркер
также: ciw для изменения текущего слова (или caw, то же самое, но только для левой руки) ciW для изменения текущего слова W = o. (rd) То же самое с v вместо c выберет в визуальном, а не заменив
lajarre
5
cib эквивалентно вводу "ci (". Вы также можете сделать "ci [", "ci {" или (если ваш vimrc настроен правильно) "ci <", для других типов скобок.
Том Лорд,
2
Также «чит» для изменения текста внутри тега. Очень полезно при работе с XML / HTML.
Уолтер
Также стоит упомянуть, что вместо этого вы можете использовать суффикс с закрывающей скобкой, если хотите. Кроме того, я только что узнал о ci}& cit- вау, это будет очень полезно. vi[m]доказывает очень захватывающую программу [ы]!
underscore_d
37

gv запускает визуальный режим и автоматически выбирает то, что вы выбрали ранее.

больше php
источник
34

: shell для запуска консоли оболочки из Vim. Полезно, например, когда вы хотите протестировать скрипт, не выходя из Vim. Просто нажмите ^ d, когда закончите с консолью оболочки, и вы вернетесь в Vim и ваш отредактированный файл.

peroumal1
источник
Я думаю, это :!shбыло слишком сложно. Я предпочитаю это, потому что проще составлять командные строки, используя регистры / дополнения из текущего буфера или, например, использовать %/ %:hдля текущего имени файла / имени
каталога
1
Это очень круто. Я использую его каждый день .. До этого это было: wq, делать cli, заново открывать vim с тем же файлом .. Отличная оптимизация
Flashin
7
Ctrl-Z для переключения на shell и fg <ENTER> для возврата к vim.
Марио Г.
Вставьте map <Esc>! :shell<CR>свой .vimrc, и вы можете запустить оболочку, просто нажав Alt + !, или Alt + Shift + 1. (Мнемоника: :!{cmd}исполняется {cmd}с снарядом.)
musiphil
:shellНачнется новый уровень вложенной оболочки. Тогда ctrl-zкак нет.
Висбуки
32

Это всегда поднимает мне настроение:

:help 42
dogbane
источник
31

vimcryption

vim -x filename.txt

Вам будет предложено ввести пароль, отредактировать и сохранить. Теперь, когда вы снова откроете файл в vi, вам нужно будет ввести пароль для просмотра.

anteatersa
источник
Синхронизируйте это с вашим Dropbox, и вы получите действительно хороший менеджер паролей ;-)
Луис Нелл
15
Но учтите, что если вы set cryptmethod=blowfish(доступны только в версии 7.3+), он будет использовать алгоритм с смехотворной силой. Смотрите help encryptionдля более подробной информации.
AB
3
Пожалуйста, не используйте шифрование vim, это не хорошее шифрование, а плохая безопасность хуже, чем ничего. Дополнительная информация: github.com/neovim/neovim/issues/694
rodrigoq
2
dgl.cx/2014/10/vim-blowfish meta-tldr: «исправлено в Vim 7.4.399 [ groups.google.com/forum/#!msg/vim_dev/D8FyRd0EwlE/bkBOo-hzTzoJ] , по причинам обратной совместимости, для которых это необходимо быть новым cryptmethod, так что используйте :set cm=blowfish2"
underscore_d
28

Сборка и отладка вашего кода из Vim!

конфигурация

Не очень, правда. Ты нуждаешься вMakefile в текущем каталоге.

Компилировать

Пока вы находитесь в Vim, напечатайте, :makeчтобы вызвать оболочку и собрать вашу программу. Не волнуйтесь, когда выход прокручивается; просто нажмитеEnter когда закончите, чтобы вернуться в Vim.

Магия

В Vim в вашем распоряжении следующие команды:

  1. :cl перечисляет ошибки, предупреждения и другие сообщения.
  2. :ccотображает текущее сообщение об ошибке / предупреждение в нижней части экрана и переходит на оскорбительную строку в вашем коде.
  3. :cc nпереходит к nому сообщению.
  4. :cn переходит к следующему сообщению.
  5. :cp переходит к предыдущему сообщению.

Есть больше; если вы заинтересованы, введите :help :ccиз Vim.

Adam Liss
источник
1
работает не только с компиляцией кода. А именно, любая задача, написанная в make-файле, отлично подходит для этого.
Дуайт Спенсер
25

^ P и ^ N

Завершите предыдущий (^ P) или следующий (^ N) текст.

^ O и ^ I

Перейти к предыдущему (^ O - «O» для старого) местоположению или к следующему (^ I - «I» рядом с «O»).

Когда вы выполняете поиск, редактируете файлы и т. Д., Вы можете перемещаться по этим «скачкам» вперед и назад.

Метки

Нажмите ma (m- метка, a - название метки). Позже, чтобы вернуться в позицию, введите `a .

димба
источник
1
Ух ты, я не знал о ^ O и ^ I: это потрясающе. Возможно, стоит включить и :help jump-motionsт. Д. В ваш ответ, если кому-то понадобится дополнительная информация.
DrAl
проверьте ShowMarks vim.org/scripts/script.php?script_id=152 . Это поможет вам вспомнить, где и какие все ваши отметки находятся в буфере. Вы можете включать и выключать визуализацию с помощью \ mt
tester
Я не понимаю разницы между ^ P и ^ N ...
lajarre
@lajarre они перебирают список доступных завершений в противоположном направлении
Патрик Осци
2
Я часто использую ^ O ^ O при открытии Vim после того, как заметил, что хочу снова отредактировать последний отредактированный файл. Огромная экономия времени!
Патрик Осцити
24

Нажмите, %когда курсор находится на кавычке, скобке, скобке или фигурной скобке, чтобы найти его совпадение.

Adam Liss
источник
20
Если курсор не находится над любым из них, он сдвигается вправо, пока не коснется одного из них.
Кибер Оливейра
@ Лео: Спасибо за бонусный совет!
Адам Лисс
22

До [символ] ( t). Это полезно для любой команды, которая принимает диапазон. Мой любимый - ct;или ct)который удаляет все, вплоть до конечной точки с запятой / закрывающих скобок, а затем переводит вас в режим вставки.

Кроме того, Gи ggполезны (Перейти вниз и вверх соответственно).

MighMoS
источник
лучший здесь, хотя некоторые другие тоже полезны, я только что знал о них всех
Funkodebat
1
Кроме того, fвместо того t, что будет [действие] через этого персонажа; например, если курсор находится в начале аргумента функции, он df,будет удален (конечно, на подходящих языках).
Actorclavilis
t и f отлично подходят для редактирования части переменной camelCase. Например, если вы только что продублировали строку и хотите изменить firstVariable на secondVariable, поместите курсор в начало firstVariable, затем ctV
Greg
1
T и F тоже работают, но в обратном направлении.
Фед
20

^r^w вставить слово под курсором в командном режиме.

Это действительно полезно при использовании команд grep или replace.

Peter Mortensen
источник
Если это единственное слово, которое вы хотите, то * в обычном режиме будет искать слово под курсором.
idbrii
17

Ввод номера строки с последующим вводом ggприведет вас к этой строке.

xastor
источник
31
: после номера строки делает то же самое: 42 переходит к строке 42
Anti Veeranna
12
Ввод номера строки с последующим G имеет тот же эффект.
Cyber ​​Oliveira
3
<number>goидет к <number>символу th в файле.
Actorclavilis
17

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

Примеры, которые я нашел особенно полезными, когда, скажем, рефакторинг списков имен символических констант последовательно:

Войдите в режим Visual Block ( Ctrl+ Qдля меня в Windows вместо Ctrl+ V)

Переместите курсор, чтобы выделить нужный блок.

Затем I whatever textнажмите и вставьте Escтекст перед блоком в каждой строке.

Используйте AвместоI чтобы вставлять текст после блока в каждой строке.

Кроме того, простое переключение случая визуального выбора ~может значительно сэкономить время.

И просто удаляя столбцы тоже с dконечно.

Anon
источник
15

^ y скопирует символ над курсором.

InnaM
источник
6
... и ^ E вставит символ под курсором
слишком много php
не работает для меня, он просто перемещает курсор в начало текста
Alex
14

q <письмо> - записывает макрос.

а также

@ <same-letter> - воспроизводит.

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

leeand00
источник
Использование qупрощает вопросы, но вы не обязаны его использовать: просто сохраните в именованном буфере команду buffer "- например, используя buffer a- "ad$...
Mei
@Mei qзаписывает макрос; Макросы могут содержать команды, а не только текст, поэтому "ad$он отличается от qa.
Брайан МакКатчон
@Sortofabeginner Это не имеет значения здесь. Команда "ad $ помещает текст в буфер a, и qa запускает его.
Mei
2
@Mei qaне запускает его; qaзаписывает и @aзапускает Это правда, что вы можете написать макрос в виде простого текста, сохранить его в регистре aс чем-то вроде "ad$, а затем выполнить его с помощью @a, но это немного больше работы. Существует принципиальная разница между вырезанием и вставкой и записью и выполнением.
Брайан Маккатон
Doh! Я знал это. Спасибо за исправление
Мэй
13

Открытие нескольких файлов с помощью вкладок

:tabe filepath

Навигация между открытыми файлами

gt and gT or :tabn and :tabp

Сохраните открытую сессию, чтобы позже вы могли вернуться к списку открытых файлов.

:mksession session_file_name.vim

Открыть созданный сеанс

vim -S session_file_name.vim

Закройте все файлы одновременно

:qa

Еще одна команда, которую я недавно узнал

autocmd

Он позволяет вам выполнить команду для события, например, вы можете запустить команду make, когда сохраняете файл, используя что-то вроде:

:autocmd BufWritePost *.cpp :make
Mansuro
источник
12

qx начнет запись нажатий клавиш. Вы можете выполнить практически любую задачу редактирования, и Vim запоминает ее. Нажмите q еще раз, когда закончите, и нажмите @x, чтобы повторить нажатия клавиш. Это отлично подходит для повторяющихся редактирований, которые слишком сложны, чтобы написать сопоставление. Вы можете иметь много записей, используя символ, отличный от x .

слишком много PHP
источник
5
Также один и тот же символ 'x' используется совместно с макрос-командой записи 'q' и именованными буферами обмена ("x ...). Вы можете оставить фрагменты макросов, сидящие вокруг вашего файла, и скопировать их в именованный буфер обмена (например," xyy "). ), а затем воспроизведите их (@x).
Кибер Оливейра
И если вы когда-либо создадите макрос awesomist, вы можете вставить этот буфер обмена в _vimrc с помощью 'let @x = ""' (поместив макрос в "") и сохранить его навсегда!
Кернс
11

Я бы сказал, что одним из моих любимых вариантов является добавление окна справки в новую вкладку:

:tab help <help_topic>

Это открывает справку в новой вкладке, и, как кто-то, кто любит вкладки Vim, это смехотворно полезно.

Robert Massaioli
источник
2
Буферы - это вкладки vim. Они лучше поддерживаются рабочим процессом vim. Я подозреваю, что вкладки были добавлены только в vim, потому что слишком много людей не понимали буферы.
still_dreaming_1
Итак, очень скоро после этого я нашел применение для вкладок в vim. Это правда, что если вы используете один буфер на вкладку, вам нужно узнать о буферах. Это не то, как вкладки предназначались для использования в vim. Большинство продвинутых пользователей vim используют буферы так, как вкладки используются в большинстве программ. Многие считают, что вкладки должны были называться раскладками в vim. Они в основном предназначены для открытия разных коллекций окон на разных вкладках. Вы также можете иметь определенный буфер, к которому вы можете вернуться, и открыть его на одной вкладке, а на другой вкладке просмотреть все остальные буферы.
still_dreaming_1
9

ХО

Изменить слово - удаляет слово под курсором и переводит вас в режим вставки, чтобы ввести новое. Конечно, это работает с другими клавишами перемещения, поэтому вы можете делать такие вещи, как c $ чтобы перейти в конец строки.

символ f +

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

Адам Нил
источник
9

:b [any portion of a buffer name]переключать буферы. Поэтому, если у вас есть два буфера, «somefile1.txt» и «someotherfile2.txt», вы можете просто переключиться на второй ":b 2.t<enter>". Он также поддерживает завершение табуляции, хотя это и не обязательно.

Говоря о завершении вкладки, настройка :set wildmode=full wildmenuтакже очень полезна. Он обеспечивает полное заполнение табуляции для командного режима, а также очень полезное меню в стиле ncurses для всех возможных совпадений при его использовании.

Michael
источник
9

:% S, / поиск, / заменить,

Вы можете использовать другие символы, кроме /(косой черты), чтобы отделить шаблоны для замены. Таким образом, вам не нужно избегать косых черт путей к файлам.

hfs
источник
2
о, черт возьми, да. Я знал, sedчто это, но нет vim. Чем больше вы знаете beer ☆
beerbajay