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

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

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

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

Ответ 1

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

Ответ 2

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

: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

Ответ 3

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

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: [email protected]

** - Vim uses words that exist in your current buffer and any other buffer you 
     may have open for auto-complete suggestions.

Ответ 4

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

Ответ 5

:q!

Я бы хотел знать, что до того, как я впервые начал vi

Ответ 6

^ X-F завершает использование имен файлов из текущего каталога. Больше не копировать/вставлять с терминала или мучительную двойную проверку.

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

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

Ответ 7

  • Никогда не отжимайте escape. См. этот ответ, чтобы узнать, почему. Как упоминалось выше, ctrl-c - лучшая альтернатива. Я настоятельно рекомендую отображать ваш ключ блокировки шапков для выхода.

  • Если вы редактируете совместимый ctags язык, используя файл тегов и: ta, ctrl-] и т.д., это отличный способ для навигации по коду даже в нескольких файлах. Кроме того, ctrl-n и ctrl-p завершение с использованием файла тэгов - отличный способ сократить нажатие клавиш.

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

  • Попытайтесь сосредоточиться на эффективном использовании команд движения, прежде чем изучать вредные привычки. Такие вещи, как использование 'dt' или 'd3w' вместо того, чтобы нажимать x кучу раз. В принципе, в любое время, когда вы часто повторяете один и тот же ключ, возможно, лучший/более быстрый/более сжатый способ выполнить одно и то же.

Ответ 8

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

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

Ответ 9

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

О позиции курсора. Я обнаружил, что курсор, который всегда находится посередине экрана, классный

set scrolloff=9999

Ответ 10

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

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

Ответ 11

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

  • ^wi: перейдите к тегу под курсором, разделив его.
  • cib/ciB: измените текст внутри текущего набора скобок() или фигурных скобок {}, соответственно.
  • :set listchars=tab:>-,trail:_ list: Показать вкладки/трейлинг-пространства, визуально отличающиеся от других пробелов. Помогает с кодированием Python.

Ответ 12

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

Ответ 13

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

Ответ 14

это всегда подбадривает меня.

:help 42

Ответ 15

vimcryption

vim -x filename.txt

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

Ответ 16

Создайте и отлаживайте свой код изнутри vim!

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

Не очень, правда. Вам нужно Makefile в текущем каталоге.

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

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

Магия

Внутри vim у вас есть следующие команды:

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

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

Ответ 17

^ P и ^ N

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

^ O и ^ I

Перейдите к предыдущему (^ O - "O" для старого) местоположения или к следующему (^ я - "I" рядом с "O" ). Когда вы выполняете поиск, редактируете файлы и т.д., Вы можете перемещаться по этим "прыжкам" вперед и назад.

знаки

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

Ответ 18

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

Ответ 19

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

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

Ответ 20

^r^w, чтобы вставить слово под курсором в командном режиме. Действительно полезно при использовании команд grep или replace

Ответ 21

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

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

Войдите в режим визуальной блокировки (для меня Ctrl-Q в Windows вместо Ctrl-V)

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

Затем I whatever text и нажимаю клавишу Esc, чтобы текст вставлялся перед блоком в каждой строке.

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

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

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

Ответ 22

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

Ответ 23

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

Ответ 24

д < буква > - записывает макрос.

и

@< же буква > - воспроизводит его.

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

Ответ 25

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

Ответ 26

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

: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

Ответ 27

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

:tab help <help_topic>

Это открывает помощь на новой вкладке и, как кто-то, кто любит вкладки vim, это смешно полезно.

Ответ 28

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

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

Ответ 29

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

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

Ответ 30

:x #(Save and Quit a File)

То же, что: wq или ZZ