Каковы наиболее используемые команды / нажатия клавиш vim? - PullRequest
99 голосов
/ 23 марта 2011

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

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

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

Ответы [ 10 ]

272 голосов
/ 23 марта 2011

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

Ссылки

Общие сведения

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

Navigation

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

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

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

Вставка

Все команды вставки завершаются с <Esc> для возврата в командный режим.

  • i вставить текст в курсор; I вставить текст в начале строки
  • a добавить текст после курсора; A добавить текст после конца строки
  • o открыть новую строку ниже; O открыть новую строку выше

Изменение

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

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

Удаление

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

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

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

Блоки

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

Global

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

Поиск

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

Файлы

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

Windows

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

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

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

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

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

19 голосов
/ 23 марта 2011

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

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

10 голосов
/ 23 марта 2011

Вот отличная шпаргалка для vim :

enter image description here

4 голосов
/ 23 марта 2011

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

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

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

3 голосов
/ 23 марта 2011

@ Шпаргалка Грега Хьюгилла очень хорошая.Я начал свой переход с TextMate несколько месяцев назад.Теперь я так же продуктивен, как и в ТМ, и постоянно удивляюсь силе Вима.

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

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 все время при редактировании текста в каком-либо другом редакторе или текстовом поле.

3 голосов
/ 23 марта 2011

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

2 голосов
/ 01 мая 2014

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

alias vil="vim  +\"'\"0"
2 голосов
/ 23 марта 2011

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

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

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

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

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

Да.

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

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

1 голос
/ 23 марта 2011

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

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

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

...