it-swarm.com.ru

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

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

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

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

372
Lin

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

309
yalestar

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

: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

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

Пример:

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

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

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

Увидеть:

:help 'incsearch'
:help :substitute
194
DrAl

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

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.
152
brian newman

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

137
Cyber Oliveira
: Д!

Я хотел бы знать, что, прежде чем я впервые запустил vi

103
Michał Piaskowski

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

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

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

54
Brian Agnew
  1. Не нажимай бежать никогда. см. Этот ответ, чтобы узнать, почему . Как уже упоминалось выше, Ctrl-C является лучшей альтернативой. Я настоятельно рекомендую сопоставить ваш ключ блокировки заглавных букв, чтобы сбежать.

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

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

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

46
anthony

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

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

46
Peter

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

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

set scrolloff=9999
44
maykeye

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

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

42
smcameron

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

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

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

35
peroumal1

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

34
too much php

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

:help 42
31
dogbane

vimcryption

vim -x filename.txt

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

29
anteatersa

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

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

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

Скомпилировать

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

Магия

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

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

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

28
Adam Liss

^ P и ^ N

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

^ O и ^ I

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

знаки

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

25
dimba

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

24
Adam Liss

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

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

21
MighMoS

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

20
Canopus

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

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

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

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

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

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

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

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

17
Anon

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

17
xastor

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

15
innaM

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

а также

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

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

14
leeand00

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

12
too much php

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

: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
12
Mansuro

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

:tab help <help_topic>

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

11
Robert Massaioli

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

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

9
Michael

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

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

8
hfs

CW

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

f + символ

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

7
Adam Neal
:x #(Save and Quit a File)

Так же, как: WQ или ZZ

7
jmohr

интерфейс с вкладками
Помимо разделенной Windows, вы также можете иметь вкладку Windows. В режиме выхода введите: tabnew. Вы можете открыть несколько вкладок, как это. Для перехода между вкладками введите tabn. Это переместится на следующую вкладку. Чтобы перейти к окну с вкладками, введите: tabn2 для перемещения второй вкладки и т.д.

Чтобы закрыть вкладку, введите: tabc или: tabclose или просто: закрыть.

Если вы находитесь в эмуляторе терминала (в основном это терминал в GUI), то вы можете попробовать выполнить: set mouse = a. Как только это будет сделано, вы можете щелкнуть мышью внутри редактора. И это также поможет вам перемещаться между вкладками, щелкая, а также закрывая, нажимая кнопку закрытия с правой стороны.

Выровняйте свой код - Полный файл
Просто введите G = gg в режиме выхода.

сложите код
Скажем, у вас есть функция, которая завершена. Вы хотите минимизировать (или свернуть) эту часть кода, чтобы освободить место и уменьшить беспорядок. Просто выберите код. Затем введите: сложить.

Это свернет код. Если вы хотите расширить код, просто зайдите туда и введите zo. Чтобы снова сложить, введите zc.

7
Nikhil Baliga

Я удивлен, что никто не упомянул поддержку окон Vim. CTRL-W s я использую почти каждый раз, когда открываю vim.

6
Kris Jenkins

Я часто создаю функции для редактирования задач и сохраняю их в своем .vimrc, чтобы найти их снова. Например, чтение .Net callstacks, которые были преобразованы в одну строку:

function! FixCallStacks()
:%s;\[NLN\];\r;g
:%s;\[TAB\];\t;g
endfunction
5
Igor Dvorkin

: стена и: стена, чтобы закрыть все разделенные экраны

5
Vijay Dev

Делая предложение xcramps на шаг вперед, я не могу сказать вам, сколько раз я использовал:

:%!sort

отсортировать список элементов в файле.

Подробности:

: Диапазон ! Команда

выполнит команду Shell в указанном диапазоне строк. Диапазон обычно указывается как начало , конец

Примеры:
1,3 указывает первые 3 строки
'a,'b выделяет текст между закладками a и b
.,$ выделяет весь документ (. = первая строка; $ = последняя строка)
% является ярлыком для .,$, а также выбирает весь документ.

Не стесняйтесь смешивать и сочетать числа, закладки, . и $.

5
Adam Liss
ma
move cursor down
:'a,.!program

Это займет весь текст между тем, где вы установите метку (ma) для текущей строки (.), Запустите ее через программу и замените содержимое отмеченной области результатами. Вы даже можете использовать его, чтобы увидеть содержимое каталога (например), сделав пустую строку, а затем с курсором, сидящим на этой строке,

:.!ls

О, и вы можете установить метки, как это для a-z (т.е. ма), и

'a

переместит вас в положение, помеченное как "а".

/ ищет вперед, а? повторяет поиск в обратном направлении без необходимости пополнения поискового шаблона.

Отличный материал. vi сильно недооценен. Как только вы это освоите, вы больше не захотите использовать IDE предоставленные редакторы.

4
xcramps

Я только что обнаружил это во время просмотра справки vim:

:help index

Вы попадете на одну ( с возможностью поиска! ) страницу со всеми командами для всех режимов.

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

Я не могу сосчитать, сколько раз я сделал только :help CTRL-R или что-то еще и получил только первое, что, конечно, никогда не будет тем, что вам нужно. Это намного лучше чем: helpgrep IMO.

Edit

И в .vimrc это идет:

nnoremap <silent> <F1> :help normal-index<CR>
inoremap <silent> <F1> <C-O>:help insert-index<CR>

:help по-прежнему возвращает вас на страницу F1 по умолчанию.

4
David Pope

Закомментируйте ряд строк:

  1. Сначала установите закладку в начале диапазона: ma

  2. Перейти на последнюю строчку в диапазоне

  3. Команда :'a,.s/^/# / Предполагается, что # - ваш символ комментария.
4
alps123

Используйте vim-bindings в командной строке в bash:

    set -o vi

В других программах, использующих readline, нажмите control-alt-j, чтобы переключиться с emacs на привязки vim.

3
Michael Fox
:Te[xplore]

Tab & Explore (делает вкладку перед генерацией окна браузера)

3
user176776

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

new var1,var2,var3,etc

Это настоящая боль - проходить и визуально пытаться отсортировать каждую переменную. Подсветка блока и команда сортировки в Vim - мои друзья здесь:

  1. Переместите курсор на первую переменную, которая будет отсортирована.
  2. Введите команду v, чтобы войти в визуальный режим.
  3. Переместите курсор в конец последней переменной, которая будет отсортирована, в моем случае я ввожу $, чтобы перейти в конец строки).
  4. Выполните команду! Sort, чтобы Vim отсортировал выделенный текст.

Это будет работать только в том случае, если в базовой системе существует команда sort.

2
igotmumps

Я знаю, что это не совсем vim. Но я нахожу интеграцию cscope действительно хорошей, и она мне очень помогает при взломе ядра linux.

Ctrl-\g, чтобы найти определение функции Ctrl-\s, чтобы найти все применения функции/макроса/переменной.

1
LB40

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

0
too much php