технически zz, zt, zb позиционируют экран с курсором в середине / верху / низу. чтобы поместить курсор в середину / верх / низ, используйте M, H или L. Оба набора команд полезны!
Питер
1
Чтение этого поста несколько месяцев или год назад помогало мне каждый день. Благодаря этому посту я использую dap для перемещения абзацев несколько раз в час.
Funkodebat
33
Я никогда не брал столько уловок со страницы, которая была помечена как неконструктивная :) Спасибо всем.
Tasos Bitsios
Ответы:
315
Я действительно хотел бы знать, что вы можете использовать CtrlCвместо того, Escчтобы выйти из режима вставки. Это было для меня настоящим повышением производительности.
Я переназначил свой 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» выделяет его при вводе символов), а затем использовать пустой шаблон в подстановке: пустой шаблон по умолчанию соответствует последнему шаблону поиска.
да, я хотел бы, чтобы я знал об этом раньше. Но опять же, это то, что я говорю обо всем, что узнаю, что является новым в 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 переключается в режим вставки, помещая курсор в то же положение, в котором он находился ранее.
Я был так счастлив, когда узнал о том, что g;сейчас это
вызывает у
@ longdeqidao совсем нет. Возвращается к последней точке вставки. Таким образом, вы можете прокрутить содержимое своего сердца, и оно вернет вас туда, где вы в последний раз вставляли.
Кибер Оливейра
9
К вашему сведению, г; (который @PatrickOscity упоминается выше) помещает курсор в то место, где было выполнено редактирование. Вы можете использовать его несколько раз, чтобы вернуться в историю. Отметив это здесь, потому что моя справка vim не упоминает об этом по какой-то странной причине.
PonyEars
13
Интуитивность Вима не перестает меня удивлять. Так как @PonyEars упомянул, g;я попытался, если "противоположность" этого будет, g,и вот, мы можем идти вперед и назад!
Кибер Оливейра
aкороче :) Но giна самом деле это очень интуитивно понятно, gобычно это противоположная операция.
Эрвин Ройяккерс
105
: Д!
Хотелось бы, чтобы я знал это до того, как впервые запустил vi.
как парень из 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в каждом. Теперь, когда вы прокрутите одну, обе панели будут прокручиваться вместе. Идеально подходит для сравнения файлов.
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{, ...варианты удаляют также скобки / кавычки.
Легко запомнить: изменить внутри выражения в скобках / изменить выражение в скобках.
это не только для 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
Не нажимай Escникогда. Посмотрите этот ответ, чтобы узнать почему . Как упоминалось выше, Ctrl+ Cявляется лучшей альтернативой. Я настоятельно рекомендую сопоставить ваш Caps Lockключ, чтобы сбежать.
Если вы редактируете Ctags совместимый язык, используя файл тегов и :ta, Ctrl+ ]и т.д. это отличный способ навигации код, даже в нескольких файлах. Кроме того, Ctrl+ Nи Ctrl+ Pзавершение с использованием файла тегов - отличный способ сократить количество нажатий клавиш.
Если вы редактируете строку, которая обернута, потому что она шире, чем ваш буфер, вы можете перемещаться вверх / вниз с помощью gk и gj.
Постарайтесь сосредоточиться на эффективном использовании команд движения, прежде чем выучите вредные привычки. Такие вещи, как использование «dt» или «d3w» вместо нажатия «xa» несколько раз. По сути, всякий раз, когда вы обнаруживаете, что нажимаете одну и ту же клавишу несколько раз, возможно, есть лучший, более быстрый, более лаконичный способ выполнить то же самое.
Попробуйте 'man ctags', если вы используете * nix, чтобы узнать, как сгенерировать файл "tags", который сообщает vim, как найти определение любой функции или переменной во многих языках в дополнение к C. Используйте ctrl +], чтобы найти определение токена под вашим курсором, или используйте: tag tokenToFind, чтобы найти любой токен, о котором он знает. Вы даже можете запустить vim с помощью «vim -t tokenToFind», чтобы открыть соответствующий файл и установить курсор на функцию, которую нужно отредактировать.
Адам Лисс
23
клавиша # будет искать слово под курсором в обратном направлении
также: 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 запускает визуальный режим и автоматически выбирает то, что вы выбрали ранее.
: shell для запуска консоли оболочки из Vim. Полезно, например, когда вы хотите протестировать скрипт, не выходя из Vim. Просто нажмите ^ d, когда закончите с консолью оболочки, и вы вернетесь в Vim и ваш отредактированный файл.
Я думаю, это :!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как нет.
Вам будет предложено ввести пароль, отредактировать и сохранить. Теперь, когда вы снова откроете файл в vi, вам нужно будет ввести пароль для просмотра.
Синхронизируйте это с вашим Dropbox, и вы получите действительно хороший менеджер паролей ;-)
Луис Нелл
15
Но учтите, что если вы set cryptmethod=blowfish(доступны только в версии 7.3+), он будет использовать алгоритм с смехотворной силой. Смотрите help encryptionдля более подробной информации.
AB
3
Пожалуйста, не используйте шифрование vim, это не хорошее шифрование, а плохая безопасность хуже, чем ничего. Дополнительная информация: github.com/neovim/neovim/issues/694
Не очень, правда. Ты нуждаешься вMakefile в текущем каталоге.
Компилировать
Пока вы находитесь в Vim, напечатайте, :makeчтобы вызвать оболочку и собрать вашу программу. Не волнуйтесь, когда выход прокручивается; просто нажмитеEnter когда закончите, чтобы вернуться в Vim.
Магия
В Vim в вашем распоряжении следующие команды:
:cl перечисляет ошибки, предупреждения и другие сообщения.
:ccотображает текущее сообщение об ошибке / предупреждение в нижней части экрана и переходит на оскорбительную строку в вашем коде.
:cc nпереходит к nому сообщению.
:cn переходит к следующему сообщению.
:cp переходит к предыдущему сообщению.
Есть больше; если вы заинтересованы, введите :help :ccиз Vim.
Ух ты, я не знал о ^ 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
Нажмите, %когда курсор находится на кавычке, скобке, скобке или фигурной скобке, чтобы найти его совпадение.
Если курсор не находится над любым из них, он сдвигается вправо, пока не коснется одного из них.
Кибер Оливейра
@ Лео: Спасибо за бонусный совет!
Адам Лисс
22
До [символ] ( t). Это полезно для любой команды, которая принимает диапазон. Мой любимый - ct;или ct)который удаляет все, вплоть до конечной точки с запятой / закрывающих скобок, а затем переводит вас в режим вставки.
Кроме того, Gи ggполезны (Перейти вниз и вверх соответственно).
лучший здесь, хотя некоторые другие тоже полезны, я только что знал о них всех
Funkodebat
1
Кроме того, fвместо того t, что будет [действие] через этого персонажа; например, если курсор находится в начале аргумента функции, он df,будет удален (конечно, на подходящих языках).
Actorclavilis
t и f отлично подходят для редактирования части переменной camelCase. Например, если вы только что продублировали строку и хотите изменить firstVariable на secondVariable, поместите курсор в начало firstVariable, затем ctV
Greg
1
T и F тоже работают, но в обратном направлении.
Фед
20
^r^w вставить слово под курсором в командном режиме.
Это действительно полезно при использовании команд grep или replace.
: после номера строки делает то же самое: 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 чтобы вставлять текст после блока в каждой строке.
Кроме того, простое переключение случая визуального выбора ~может значительно сэкономить время.
не работает для меня, он просто перемещает курсор в начало текста
Alex
14
q <письмо> - записывает макрос.
а также
@ <same-letter> - воспроизводит.
Это, безусловно, самые полезные команды в Vim, поскольку вы можете заставить компьютер выполнять за вас большую работу, и вам даже не нужно писать программу или что-то еще.
Использование 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, когда сохраняете файл, используя что-то вроде:
qx начнет запись нажатий клавиш. Вы можете выполнить практически любую задачу редактирования, и Vim запоминает ее. Нажмите q еще раз, когда закончите, и нажмите @x, чтобы повторить нажатия клавиш. Это отлично подходит для повторяющихся редактирований, которые слишком сложны, чтобы написать сопоставление. Вы можете иметь много записей, используя символ, отличный от x .
Также один и тот же символ 'x' используется совместно с макрос-командой записи 'q' и именованными буферами обмена ("x ...). Вы можете оставить фрагменты макросов, сидящие вокруг вашего файла, и скопировать их в именованный буфер обмена (например," xyy "). ), а затем воспроизведите их (@x).
Кибер Оливейра
И если вы когда-либо создадите макрос awesomist, вы можете вставить этот буфер обмена в _vimrc с помощью 'let @x = ""' (поместив макрос в "") и сохранить его навсегда!
Кернс
11
Я бы сказал, что одним из моих любимых вариантов является добавление окна справки в новую вкладку:
:tab help <help_topic>
Это открывает справку в новой вкладке, и, как кто-то, кто любит вкладки Vim, это смехотворно полезно.
Буферы - это вкладки vim. Они лучше поддерживаются рабочим процессом vim. Я подозреваю, что вкладки были добавлены только в vim, потому что слишком много людей не понимали буферы.
still_dreaming_1
Итак, очень скоро после этого я нашел применение для вкладок в vim. Это правда, что если вы используете один буфер на вкладку, вам нужно узнать о буферах. Это не то, как вкладки предназначались для использования в vim. Большинство продвинутых пользователей vim используют буферы так, как вкладки используются в большинстве программ. Многие считают, что вкладки должны были называться раскладками в vim. Они в основном предназначены для открытия разных коллекций окон на разных вкладках. Вы также можете иметь определенный буфер, к которому вы можете вернуться, и открыть его на одной вкладке, а на другой вкладке просмотреть все остальные буферы.
still_dreaming_1
9
ХО
Изменить слово - удаляет слово под курсором и переводит вас в режим вставки, чтобы ввести новое. Конечно, это работает с другими клавишами перемещения, поэтому вы можете делать такие вещи, как c $ чтобы перейти в конец строки.
символ f +
Находит следующее вхождение символа в текущей строке. Таким образом, вы можете сделать vft, чтобы выделить весь текст до следующей буквы "t" в текущей строке. Это еще одна клавиша движения, поэтому она работает и с другими командами.
:b [any portion of a buffer name]переключать буферы. Поэтому, если у вас есть два буфера, «somefile1.txt» и «someotherfile2.txt», вы можете просто переключиться на второй ":b 2.t<enter>". Он также поддерживает завершение табуляции, хотя это и не обязательно.
Говоря о завершении вкладки, настройка :set wildmode=full wildmenuтакже очень полезна. Он обеспечивает полное заполнение табуляции для командного режима, а также очень полезное меню в стиле ncurses для всех возможных совпадений при его использовании.
Вы можете использовать другие символы, кроме /(косой черты), чтобы отделить шаблоны для замены. Таким образом, вам не нужно избегать косых черт путей к файлам.
Ответы:
Я действительно хотел бы знать, что вы можете использовать CtrlCвместо того, Escчтобы выйти из режима вставки. Это было для меня настоящим повышением производительности.
источник
Самый последний трюк "вау", который я узнал, - это метод сложного поиска и замены. Довольно часто в прошлом у меня было действительно сложное регулярное выражение для замены, и оно не работало. Существует лучший способ:
«Уловка» здесь (при отсутствии лучшего слова) - это способ, которым вы можете использовать поиск для создания регулярного выражения (и «incsearch» выделяет его при вводе символов), а затем использовать пустой шаблон в подстановке: пустой шаблон по умолчанию соответствует последнему шаблону поиска.
Пример:
Эквивалентно:
Видеть:
источник
<Ctrl-R>/
вставить последний поисковый запрос. (См.:help i_CTRL-R
) Действительно полезно для аналогичных выше, но вы хотите захватить часть результатов поиска. (как это:%s:/\\([fF]rank\\) and mary/marie and \1/g
):%s//...
также работает с*
(поиск слова под курсором). Плагин Visual-Star-Search расширяет функциональные возможности,*
чтобы соответствовать всему тексту визуального выделения, что позволяет легко искать и заменять выбранный текст, напримерv3e
(визуально выбрать 3 слова)*
(поиск) и:%s//replacement/g
(заменить все вхождения на " замена "). Я использую это так часто , что у меня есть отображение для глобальной команды подстановки::nmap <Leader>s :%s///g<left><left>
.%s:
должно быть:%s
, и для моей системы мне нужно было\(\)
вместо этого\\(\\)
Я создал эту ссылку моей наиболее часто используемой команды для моего друга:
источник
gi переключается в режим вставки, помещая курсор в то же положение, в котором он находился ранее.
источник
g;
сейчас этоg;
я попытался, если "противоположность" этого будет,g,
и вот, мы можем идти вперед и назад!a
короче :) Ноgi
на самом деле это очень интуитивно понятно,g
обычно это противоположная операция.Хотелось бы, чтобы я знал это до того, как впервые запустил vi.
источник
:q!
если вы пытаетесь выйти без сохранения буфера.^ XF завершает использование имен файлов из текущего каталога. Нет больше копирования / вставки из терминала или болезненной двойной проверки.
^ XP завершает использование слов в текущем файле
: set scrollbind заставляет один буфер прокручиваться рядом с другим. например, разбить окно на две вертикальные панели. Загрузите один файл в каждом (возможно, разные версии одного и того же файла). Делай
:set scrollbind
в каждом. Теперь, когда вы прокрутите одну, обе панели будут прокручиваться вместе. Идеально подходит для сравнения файлов.источник
:set noscb
выключить и использовать,:set scb
чтобы включить (не:scrollbind
).:h scrollbind
:diffsplit file2
или просто запустив vimvim -d file1 file2
. Vim автоматически связывает два файла.Вы можете использовать целый набор команд для изменения текста в скобках / скобках / кавычках / тегах. Очень полезно избегать необходимости искать начало и конец группы. Пытаться
ci(, ci{, ci<, ci", ci', ct
зависимости от того, какой объект вы хотите изменить. Иca(, ca{, ...
варианты удаляют также скобки / кавычки.Легко запомнить: изменить внутри выражения в скобках / изменить выражение в скобках.
источник
c
. Вы можете сделать это,d
чтобы удалить (например, di (или da (),y
чтобы восстановить,v
выбрать и т. Д.):help
? Я не могу найти это нигде. > _ <:help motion.txt
! Спасибо!cit
для изменения содержимого текущего тега. Например, в<span>Some text</span>
, если ваш курсор находится над «m», вы можете сделать,dit
чтобы получить<span></span>
.Не нажимай Escникогда. Посмотрите этот ответ, чтобы узнать почему . Как упоминалось выше, Ctrl+ Cявляется лучшей альтернативой. Я настоятельно рекомендую сопоставить ваш Caps Lockключ, чтобы сбежать.
Если вы редактируете Ctags совместимый язык, используя файл тегов и
:ta
, Ctrl+ ]и т.д. это отличный способ навигации код, даже в нескольких файлах. Кроме того, Ctrl+ Nи Ctrl+ Pзавершение с использованием файла тегов - отличный способ сократить количество нажатий клавиш.Если вы редактируете строку, которая обернута, потому что она шире, чем ваш буфер, вы можете перемещаться вверх / вниз с помощью gk и gj.
Постарайтесь сосредоточиться на эффективном использовании команд движения, прежде чем выучите вредные привычки. Такие вещи, как использование «dt» или «d3w» вместо нажатия «xa» несколько раз. По сути, всякий раз, когда вы обнаруживаете, что нажимаете одну и ту же клавишу несколько раз, возможно, есть лучший, более быстрый, более лаконичный способ выполнить то же самое.
источник
Звездочка,, *будет искать слово под курсором.
[+ Tabприведет вас к определению функции C, которая находится под вашим курсором. (Хотя это не всегда работает.)
источник
[ + Tab
будет работать всегда, когда вы расширяетеpath
необходимые папки, такие какset path+=path/to/files
ZZ
(работает как:wq
)И о позиции курсора: я обнаружил, что курсор, который всегда остается в середине экрана, это круто -
источник
:x
делает это также:x
, который только сохраняет файл, если есть изменения, тогда как:wq
всегда сохраняет файл.Некоторые из моих последних дополнений в мой мозговой магазин Vim:
^wi
: Перейти к тегу под курсором, разделив окно.cib/ciB
: Изменить текст внутри текущего набора скобок () или фигурных скобок {} соответственно.:set listchars=tab:>-,trail:_ list
: Показать вкладки / пробелы, визуально отличающиеся от других пробелов. Это очень помогает с кодированием Python.источник
cib
отлично.ci}
&cit
- вау, это будет очень полезно.vi[m]
доказывает очень захватывающую программу [ы]!gv запускает визуальный режим и автоматически выбирает то, что вы выбрали ранее.
источник
: shell для запуска консоли оболочки из Vim. Полезно, например, когда вы хотите протестировать скрипт, не выходя из Vim. Просто нажмите ^ d, когда закончите с консолью оболочки, и вы вернетесь в Vim и ваш отредактированный файл.
источник
:!sh
было слишком сложно. Я предпочитаю это, потому что проще составлять командные строки, используя регистры / дополнения из текущего буфера или, например, использовать%
/%:h
для текущего имени файла / имениmap <Esc>! :shell<CR>
свой.vimrc
, и вы можете запустить оболочку, просто нажав Alt + !, или Alt + Shift + 1. (Мнемоника::!{cmd}
исполняется{cmd}
с снарядом.):shell
Начнется новый уровень вложенной оболочки. Тогдаctrl-z
как нет.Это всегда поднимает мне настроение:
источник
vimcryption
vim -x filename.txt
Вам будет предложено ввести пароль, отредактировать и сохранить. Теперь, когда вы снова откроете файл в vi, вам нужно будет ввести пароль для просмотра.
источник
set cryptmethod=blowfish
(доступны только в версии 7.3+), он будет использовать алгоритм с смехотворной силой. Смотритеhelp encryption
для более подробной информации.:set cm=blowfish2
"Сборка и отладка вашего кода из Vim!
конфигурация
Не очень, правда. Ты нуждаешься в
Makefile
в текущем каталоге.Компилировать
Пока вы находитесь в Vim, напечатайте,
:make
чтобы вызвать оболочку и собрать вашу программу. Не волнуйтесь, когда выход прокручивается; просто нажмитеEnter когда закончите, чтобы вернуться в Vim.Магия
В Vim в вашем распоряжении следующие команды:
:cl
перечисляет ошибки, предупреждения и другие сообщения.:cc
отображает текущее сообщение об ошибке / предупреждение в нижней части экрана и переходит на оскорбительную строку в вашем коде.:cc n
переходит кn
ому сообщению.:cn
переходит к следующему сообщению.:cp
переходит к предыдущему сообщению.Есть больше; если вы заинтересованы, введите
:help :cc
из Vim.источник
^ P и ^ N
Завершите предыдущий (^ P) или следующий (^ N) текст.
^ O и ^ I
Перейти к предыдущему (^ O - «O» для старого) местоположению или к следующему (^ I - «I» рядом с «O»).
Когда вы выполняете поиск, редактируете файлы и т. Д., Вы можете перемещаться по этим «скачкам» вперед и назад.
Метки
Нажмите ma (m- метка, a - название метки). Позже, чтобы вернуться в позицию, введите `a .
источник
:help jump-motions
т. Д. В ваш ответ, если кому-то понадобится дополнительная информация.Нажмите,
%
когда курсор находится на кавычке, скобке, скобке или фигурной скобке, чтобы найти его совпадение.источник
До [символ] (
t
). Это полезно для любой команды, которая принимает диапазон. Мой любимый -ct;
илиct)
который удаляет все, вплоть до конечной точки с запятой / закрывающих скобок, а затем переводит вас в режим вставки.Кроме того,
G
иgg
полезны (Перейти вниз и вверх соответственно).источник
f
вместо тогоt
, что будет [действие] через этого персонажа; например, если курсор находится в начале аргумента функции, онdf,
будет удален (конечно, на подходящих языках).^r^w
вставить слово под курсором в командном режиме.Это действительно полезно при использовании команд grep или replace.
источник
Ввод номера строки с последующим вводом
gg
приведет вас к этой строке.источник
<number>go
идет к<number>
символу th в файле.Хотелось бы, чтобы я знал основы визуального блока раньше. Даже если вы не используете Vim для чего-либо еще, это может сэкономить много времени, чтобы открыть файл в Vim только для некоторых операций с блоками. Я совершенно уверен, что потратил кучу времени на ручную работу.
Примеры, которые я нашел особенно полезными, когда, скажем, рефакторинг списков имен символических констант последовательно:
Войдите в режим Visual Block ( Ctrl+ Qдля меня в Windows вместо Ctrl+ V)
Переместите курсор, чтобы выделить нужный блок.
Затем
I whatever text
нажмите и вставьте Escтекст перед блоком в каждой строке.Используйте
A
вместоI
чтобы вставлять текст после блока в каждой строке.Кроме того, простое переключение случая визуального выбора
~
может значительно сэкономить время.И просто удаляя столбцы тоже с
d
конечно.источник
^ y скопирует символ над курсором.
источник
q <письмо> - записывает макрос.
а также
@ <same-letter> - воспроизводит.
Это, безусловно, самые полезные команды в Vim, поскольку вы можете заставить компьютер выполнять за вас большую работу, и вам даже не нужно писать программу или что-то еще.
источник
q
упрощает вопросы, но вы не обязаны его использовать: просто сохраните в именованном буфере команду buffer"
- например, используя buffera
-"ad$
...q
записывает макрос; Макросы могут содержать команды, а не только текст, поэтому"ad$
он отличается отqa
.qa
не запускает его;qa
записывает и@a
запускает Это правда, что вы можете написать макрос в виде простого текста, сохранить его в регистреa
с чем-то вроде"ad$
, а затем выполнить его с помощью@a
, но это немного больше работы. Существует принципиальная разница между вырезанием и вставкой и записью и выполнением.Открытие нескольких файлов с помощью вкладок
Навигация между открытыми файлами
Сохраните открытую сессию, чтобы позже вы могли вернуться к списку открытых файлов.
Открыть созданный сеанс
Закройте все файлы одновременно
Еще одна команда, которую я недавно узнал
Он позволяет вам выполнить команду для события, например, вы можете запустить команду make, когда сохраняете файл, используя что-то вроде:
источник
qx начнет запись нажатий клавиш. Вы можете выполнить практически любую задачу редактирования, и Vim запоминает ее. Нажмите q еще раз, когда закончите, и нажмите @x, чтобы повторить нажатия клавиш. Это отлично подходит для повторяющихся редактирований, которые слишком сложны, чтобы написать сопоставление. Вы можете иметь много записей, используя символ, отличный от x .
источник
Я бы сказал, что одним из моих любимых вариантов является добавление окна справки в новую вкладку:
Это открывает справку в новой вкладке, и, как кто-то, кто любит вкладки Vim, это смехотворно полезно.
источник
ХО
Изменить слово - удаляет слово под курсором и переводит вас в режим вставки, чтобы ввести новое. Конечно, это работает с другими клавишами перемещения, поэтому вы можете делать такие вещи, как c $ чтобы перейти в конец строки.
символ f +
Находит следующее вхождение символа в текущей строке. Таким образом, вы можете сделать vft, чтобы выделить весь текст до следующей буквы "t" в текущей строке. Это еще одна клавиша движения, поэтому она работает и с другими командами.
источник
:b [any portion of a buffer name]
переключать буферы. Поэтому, если у вас есть два буфера, «somefile1.txt» и «someotherfile2.txt», вы можете просто переключиться на второй":b 2.t<enter>"
. Он также поддерживает завершение табуляции, хотя это и не обязательно.Говоря о завершении вкладки, настройка
:set wildmode=full wildmenu
также очень полезна. Он обеспечивает полное заполнение табуляции для командного режима, а также очень полезное меню в стиле ncurses для всех возможных совпадений при его использовании.источник
:% S, / поиск, / заменить,
Вы можете использовать другие символы, кроме
/
(косой черты), чтобы отделить шаблоны для замены. Таким образом, вам не нужно избегать косых черт путей к файлам.источник
sed
что это, но нетvim
. Чем больше вы знаете beer ☆