Какие команды / нажатия клавиш vim наиболее часто используются?


112

Я занимаюсь программированием на Ruby и пытаюсь переключиться с Textmate на MacVim, и у меня возникают проблемы с просмотром гигантских списков вещей, которые вы можете делать в VIM, и всех нажатий клавиш для них. Я устал слышать «Вы можете использовать« I »для вставки текста, или« a »для добавления текста после символа, или« A »для добавления текста в конец строки, или…» Я не могу представить каждый использует все 20 различных нажатий клавиш для навигации по тексту, 10 или около того клавиш для начала добавления текста и 18 способов визуального выбора внутреннего блока. Или ты !?

Моя идеальная шпаргалка - это 30-40 наиболее часто используемых нажатий клавиш или команд, которые каждый использует для написания кода ежедневно, а также абсолютно необходимые плагины, которые рубисты используют ежедневно, и 10 наиболее часто используемых команд для них. В теории, как только у меня есть , что и начинают становиться компетентными в VIM , как я нахожусь в Textmate, то я могу начать обучение тысячи других команд ВИМ , которые делают меня более эффективным.

Или я вообще неправильно изучаю VIM?


9
Обязательная ссылка на cafepress.com/geekcheat.11507711 .
geekosaur

1
Помечено, чтобы удалить «рубин» и добавить «сочетания клавиш». Кажется более подходящим.

"Я вообще неправильно изучаю Vim?" - нет, вам просто нужно начать с некоторых основ и помнить, что вы все равно будете изучать больше команд через год. Может быть, когда-нибудь вы действительно воспользуетесь всеми командами! Но никто не использует их все с первого дня.
Cascabel

Ответы:


307

Вот подсказка, которую я написал однажды, с командами, которые я использую регулярно:

Ссылки

Общее

  • Почти всем командам может предшествовать число для подсчета повторов. например. 5dd удалить 5 строк
  • <Esc> выводит вас из любого режима и обратно в командный режим
  • Команды, которым предшествует :, выполняются в командной строке внизу экрана.
  • : help помочь с любой командой

Навигация

  • Перемещение курсора: ← hj k l →
  • По словам:
    • w следующее слово (по пунктуации); W следующее слово (пробелами)
    • b обратное слово (по пунктуации); B обратное слово (пробелами)
    • e конечное слово (по пунктуации); E конечное слово (пробелами)
  • По строке:
    • 0 начало строки; ^ первый непробельный
    • $ конец строки
  • По абзацам:
    • { предыдущая пустая строка; } следующая пустая строка
  • По файлу:
    • gg начало файла; грамм конец файла
    • 123G перейти к определенному номеру строки
  • По маркеру:
    • mx установить отметку x ; 'x перейти к отметке x
    • ». перейти к позиции последнего редактирования
    • ' вернуться к последней точке перед прыжком
  • Прокрутка:
    • ^ F вперед на весь экран; ^ B назад на весь экран
    • ^ D вниз на половину экрана; ^ U вверх на половину экрана
    • ^ E прокрутите на одну строку вверх; ^ Y прокрутить на одну строку вниз
    • zz центральная линия курсора

Редактирование

  • u отменить; ^ R повторить
  • . повторить последнюю команду редактирования

Вставка

Все команды вставки заканчиваются, <Esc>чтобы вернуться в командный режим.

  • я вставляю текст под курсором; я вставляю текст в начало строки
  • добавить текст после курсора; Текст Append после конца строки
  • o открыть новую строку ниже; O открыть новую строку выше

изменения

  • r заменить одиночный символ; р заменить несколько символов
  • s изменить один символ
  • cw изменить слово; C перейти в конец строки; cc изменить всю строку
  • c<motion> изменяет текст в направлении движения
  • ci ( изменить внутри скобок ( дополнительные примеры см. в разделе « Выбор текстового объекта» )

Удаление

  • Икс удалить символ
  • dw удалить слово; D удалить до конца строки; дд удалить всю строку
  • d<motion> удаляет в направлении движения

Вырезать и вставить

  • yy скопировать строку в буфер вставки; dd вырезать строку в буфер вставки
  • p вставить буфер под строкой курсора; P вставить буфер над линией курсора
  • xp поменять местами два символа ( x, чтобы удалить один символ, затем p, чтобы вернуть его после позиции курсора)

Блоки

  • v поток визуального блока; V линия визуального блока; ^ V столбец визуального блока
    • большинство команд движения расширяют блок до новой позиции курсора
    • o перемещает курсор на другой конец блока
  • d или x вырезать блок в буфер для вставки
  • y скопировать блок в буфер вставки
  • > блок отступа; < незакрытый блок
  • gv повторно выбрать последний визуальный блок

Глобальный

  • : заменитель % s / foo / bar / g все вхождения "foo" на "bar"
    • % - это диапазон который указывает каждую строку в файле
    • / g - это флаг, который изменяет все вхождения в строке, а не только первое.

Поиск

  • / поиск вперед; ? искать в обратном направлении
  • * поиск вперед по слову под курсором; # поиск в обратном направлении слова под курсором
  • n следующий матч в том же направлении; N следующий матч в противоположном направлении
  • fx вперед к следующему символу x ; Fx назад к предыдущему символу x
  • ; снова перейти к тому же персонажу в том же направлении; , перейти к тому же персонажу в противоположном направлении

Файлы

  • : w записать файл на диск
  • : wname записать файл на диск какname
  • ZZ записать файл на диск и выйти
  • : n отредактировать новый файл; : n! редактировать новый файл без сохранения текущих изменений
  • : q выйти из редактирования файла; : q! выйти из редактирования без сохранения изменений
  • : e снова отредактируйте тот же файл (если он был изменен вне vim)
  • : e. обозреватель каталогов

Windows

  • ^ Wn в новом окне
  • ^ Wj вниз к следующему окну; ^ Нед. к предыдущему окну
  • ^ W_ развернуть текущее окно; ^ W = сделать все окна одинакового размера
  • ^ W + увеличить размер окна; ^ W- уменьшить размер окна

Исходная навигация

  • % переход к соответствующей круглой скобке / скобке / фигурной скобке или языковому блоку, если языковой модуль загружен
  • gd перейти к определению локального символа под курсором; ^ O вернуться на предыдущую позицию
  • ^] перейти к определению глобального символа (требуется tagsфайл); ^ Т вернуться в предыдущую позицию (сохраняется произвольный стек позиций)
  • ^ N (в режиме вставки) автоматическое завершение слова

Показать локальные изменения

В Vim есть некоторые функции, которые позволяют легко выделять строки, которые были изменены по сравнению с базовой версией в системе управления версиями. Я создал небольшой vim-скрипт, который упрощает эту задачу: http://github.com/ghewgill/vim-scmdiff


1
+1 Относительно минимально, хотя я должен признать, что я не использую никаких оконных команд или перемещаюсь с чем-либо, кроме клавиш со стрелками / pageup / pagedown / home / end и gg / G. Да, и для навигации по номерам строк вы также можете использовать: 123 (командный режим).

2
Хорошая шпаргалка. Я бы добавил ^ w ^ w для циклического перехода между окнами,: x вместо ZZ для согласованности, tx вперед перед символом и Tx назад.
romainl

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

2
Если вы хотите избежать Escключа (и RSI?), Вы можете использовать ^[. ^cтоже работает (но не расширяет аббревиатуры). Источник: vim.wikia.com/wiki/Avoid_the_escape_key
Лиан,

22

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Это лучшая вещь для изучения VIM.


Я никогда раньше не видел этого, очень классная справка, когда вы знаете, что делают команды.
amccormack

3
Однако "графическая" часть бесполезна, если у вас нет qwerty-клавиатуры.
romainl

5
Меня поражает, что публикация ссылки (которая, кстати, уже была отправлена ​​до смерти) привлекает столько внимания, в то время как другие плакаты не делают этого ...
Ливен Кеерсмэкерс

Явный победитель в сообщениях vim: stackoverflow.com/questions/1218390/…
Джастин Томас


4

Вы уже прошли встроенное руководство по Vim? Если нет, перейдите в командную строку и введите vimtutor. Это отличный способ выучить начальные команды.

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

В Интернете есть несколько хороших часто задаваемых вопросов и шпаргалок по vim. Я бы рекомендовал поискать vim + faqи vim + cheatsheet. Cheat-Sheets.org # vim - хороший источник, как и вики- сайты Vim Tips .


Я только что узнал об этом, и, к счастью, он установлен на Mac. Пробуем прямо сейчас (в час ночи…)
Клинтон,

Я давно использую vim, и это одна из первых вещей, которые я устанавливаю на машину. MacVim , на Mac OS очень хорошо. Я стараюсь компилировать vim из исходного кода на большинстве компьютеров с Linux, которые я использую, просто потому, что большинство дистрибутивов устарели или не имеют правильной языковой поддержки. Я держу текущую версию моего ~/.vimrc, ~/.gvimrcи ~/.vimкаталог в тар-шар для того, когда я должен создать что - то. Копирование этого и извлечение файлов позволяет мне запустить vim со всеми моими обычными командами и цветовыми схемами за считанные минуты в Windows, Mac и Linux.
Железный Человек

3

То , что большинство людей сделать , это начать с голой основой, как , может быть i, yw,yy и p. Вы можете продолжать использовать клавиши со стрелками для перемещения, выделения текста с помощью мыши, использования меню и т. Д. Затем, когда что-то замедляет вас, вы смотрите вверх более быстрый способ сделать это и постепенно добавляете все больше и больше команд. Некоторое время вы можете изучать одну новую команду в день, а затем она будет постепенно увеличиваться до одной в неделю. Через месяц вы почувствуете себя достаточно продуктивным. Через год у вас будет довольно солидный репертуар, а через 2-3 года вы даже не будете сознательно думать, что набирают ваши пальцы, и это будет выглядеть странно, если вам придется объяснять это кому-то. Я выучил vi в 1993 году и до сих пор осваиваю 2 или 3 новые команды в год.


3

Шпаргалка @Greg Hewgill очень хороша. Я начал переходить с TextMate несколько месяцев назад. Теперь я так же продуктивен, как и с TM, и постоянно удивляюсь мощи Vim.

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

Grosso modo, я не думаю, что радикальный переход - хорошая идея. Vim очень отличается, и лучше всего делать это постепенно.

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

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

  • rи Rзаменить символы
  • <C-a>и <C-x>увеличивать и уменьшать числа
  • citчтобы изменить содержимое HTML - тега и его варианты ( cat, dit, dat,ci( и т.д.)
  • <C-x><C-o>(сопоставлено ,,) для комплексного завершения
  • выбор визуального блока с помощью <C-v>
  • и так далее…

Как только вы привыкнете к Vim, становится действительно сложно не нажимать oили xпостоянно редактировать текст в каком-либо другом редакторе или текстовом поле.


2

Я не могу представить, чтобы каждый использовал все 20 различных нажатий клавиш для навигации по тексту, 10 или около того клавиш для начала добавления текста и 18 способов визуального выбора внутреннего блока. Или ты !?

Я делаю.

Теоретически, как только я получу это и начну так же хорошо разбираться в VIM, как и в Textmate, я могу начать изучать тысячи других команд VIM, которые сделают меня более эффективным.

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


2

На tuxfiles.org есть довольно хорошая шпаргалка. Я думаю, что есть пара моментов в изучении команд:

  • Регулярно читайте шпаргалку. Не беспокойтесь об использовании их всех или запоминании всех ключей, просто знайте, что команда существует. Найдите команду и используйте ее, когда обнаружите, что делаете что-то повторяющееся.
  • Если вы обнаружите, что делаете что-то регулярно (например, удаляете всю строку после определенного символа d$), выполните быстрый поиск в Google, чтобы узнать, сможете ли вы найти для этого команду.
  • Запишите команды, которые вы считаете полезными, и сохраните этот список на месте, пока будете писать код. Я бы возражал против того, чтобы что-то печатать, и вместо этого рекомендую вам использовать записи для нескольких команд за раз.
  • Если возможно, понаблюдайте за другими программистами, использующими vim, и спросите их, какие команды они используют, когда увидите, что они делают что-то интересное.

Помимо этих советов, вам следует понять несколько основных понятий.

  • vim будет использовать один и тот же символ для обозначения одной и той же функции. Например, чтобы удалить строку после использования символа d$. Чтобы выделить строку после определенного символа, используйте v$. Обратите внимание, что это $означает, что вы будете делать что-то до конца строки с того места, где сейчас находится ваш курсор.
  • u отменяется, и ctrl+r повторяется.
  • если поставить число перед командой, она будет выполняться многократно. 3ddудалит строку, на которой находится курсор, и две следующие за ней строки, аналогично3yy скопирует строку, на которой находится курсор, и две следующие за ней строки.
  • понять , как перемещаться по буферы использовать :lsв список буферов, и :bn, :bpчтобы цикл через них.
  • прочтите учебное пособие, содержащееся в.:help Это, вероятно, лучший способ «изучить веревки», а также остальные команды, которые вы узнаете в процессе использования.

2

Поместите это в свой .bashrc, чтобы открыть vim с последним отредактированным файлом в последней отредактированной строке

alias vil="vim  +\"'\"0"

1

Перейдите в раздел «Эффективное редактирование с помощью vim» и узнайте, что вам нужно для начала. Не все на этой странице важно с самого начала, поэтому выберите то, что хотите.

Оттуда используйте vim для всего. «hjkl», «y» и «p» помогут вам далеко, даже если это не самый эффективный способ. Когда вы сталкиваетесь с задачей, для которой вы не знаете волшебного ключа, чтобы выполнить ее эффективно (или вообще), и обнаруживаете, что делаете это более чем несколько раз, посмотрите ее. Мало-помалу это станет второй натурой.

Я обнаружил, что vim пугает много месяцев назад (когда у него не было буквы «m» на конце), но потребовалось всего около недели постоянного использования, чтобы стать эффективным. Я по-прежнему считаю, что это самый быстрый редактор, в котором можно работать.


Ссылка на «Эффективное редактирование с помощью vim» теперь мертва. Думаю, альтернативу можно найти на robertames.com/files/vim-editing.html
Дэмиан Пауэлл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.