# Шпаргалка по Vim ## Общее |Команда|Значение| |:---|:---| | :help keyword |- открыть помощь по ключевому слову | | :o file |- открыть file | | :sav file |- сохранить весь текщий буфер как file | | :close |- закрыть текущую панель | | K |- открыть справочное руководство для слова под курсором | ### Выход и сохранение |Команда|Значение| |:---|:---| | :w |- сохранить файл, но не выходить | | :w !sudo tee % |- сохранить файл с sudo | | :wq либо :x либо ZZ |- сохранить файл и выйти | | :q |- выйти (терпит неудачу в случае несохраненных изменений) | | :q! либо ZQ |- выйти и потерять несохраненные изменения | ## Перемещение курсора |Команда|Значение| |:---|:---| | h |- передвинуть курсор влево | | j |- передвинуть курсор **на одну фактическую строку вниз** | | k |- передвинуть курсор **на одну фактическую строку вверх** | | l |- передвинуть курсор вправо | | gj |- передвинуть курсор **на одну видимую строку вниз** | | gk |- передвинуть курсор **на одну видимую строку вверх** | | H |- переместиться **к началу экрана** | | M |- переместиться **к середине экрана** | | L |- переместиться **к концу экрана** | | w |- переместиться **вперед на начало слова** | | e |- переместиться **вперед на конец слова** | | b |- переместиться **назад на начало слова** | | % |- переместиться **к парному символу** (по умолчанию поддерживаются: '()', '{}', '[]' - подробнее по команде :h matchpairs в vim) | | 0 |- переместиться **на начало строки** | | $ |- переместиться **на конец строки** | | gg |- переместиться **на первую строку документа** | | G |- переместиться **на последнюю строку документа** | | 5G |- переместить **на пятую строку** (соответственно цифре) | | } |- переместиться **к следующему параграфу** (или функции/блоку при редактировании кода) | | { |- переместиться **к предыдущему параграфу** (или функции/блоку при редактировании кода) | | Ctrl + b |- переместиться **назад на целый экран** | | Ctrl + f |- переместиться **вперед на целый экран** | | Ctrl + d |- переместиться **вперед на половину экрана** | | Ctrl + u |- переместиться **назад на половину экрана** | Чтобы узнать номер строке, на которой в файле стоит курсор, и информацию о файле нужно нажать Ctrl + g. Чтобы перейти на строку номер N нужно набрать номер соответствующей строки (N), а потом нажать Shift + g ## Режим вставки - вставка/добавление текста |Команда|Значение| |:---|:---| | i |- вставка перед курсором | | I |- вставка в начало строки | | a |- вставка (добавление) после курсора | | A |- вставка (добавление) в конец строки | | o |- добавление новой строки под текущей | | O |- добавление новой строки над текущей | | ea |- вставка (добавление) после конца слова | | Esc |- выход из режима вставки | ## Редактирование |Команда|Значение| |:---|:---| | r |- заменить один символ | | R |- заменить более чем один символ | | J |- присоединить нижнюю строку к текущей | | cc |- заменить всю строку | | cw |- заменить всё текущее слово | | c$ |- заменить до конца строки | | s |- удалить символ и заменить текст | | S |- удалить строку и заменить текст (то же что cc) | | xp |- переставить две буквы (удалить и вставить) | | u |- отменить | | Ctrl + r |- применить последнее отменённое изменение | | . |- повторить последнюю команду | ## Вырезать и вставить |Команда|Значение| |:---|:---| | yy |- скопировать строку | | 2yy |- скопировать 2 строки | | yw |- скопировать слово | | y$ |- скопировать до конца строки | | p |- вставить буфер обмена после курсора | | P |- вставить буфер обмена перед курсором | | dd |- удалить (вырезать) строку | | 2dd |- удалить (вырезать) 2 строки | | dw |- удалить (вырезать) слово | | D |- удалить (вырезать) до конца строки | | d$ |- удалить (вырезать) до конца строки | | x |- удалить (вырезать) символ | Многие команды, изменяющие текст, состоят из оператора и объекта. Формат команды удаления с оператором d следующий: ``` d объект ``` Здесь: * d - оператор удаления. * объект - над чем должна быть выполнена команда (перечислено ниже). Формат команды в обычном режиме имеет вид: ``` [число] команда объект ИЛИ команда [число] объект ``` где: * [число] - сколько раз повторить выполнение команды, опционально * команда - что выполнить, например d для удаления * объект - на что должна воздействовать команда, например w (слово), $ (до конца строки), и т.д. Краткий список объектов: * w - от курсора до конца слова, включая последующий пробел. * e - от курсора до конца слова, НЕ включая последующий пробел. * $ - от курсора до конца строки. * ^ - от курсора до начала строки. **Замечание!** Простое нажатие на символ объекта в обычном режиме (Normal mode) без предварительного оператора переместит курсор так, как указано в списке объектов. ## Выделение текста (визуальный режим) |Команда|Значение| |:---|:---| | v |- включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)| | V |- включить построчный режим выделения | | o |- переместиться на другой конец выделенной области | | Ctrl + v |- включить режим выделения блоков | | O |- переместить на другой угол блока | | aw |- выделить слово | | ab |- блок в () | | aB |- блок в {} | | ib |- внутренний блок в () | | iB |- внутренний блок в {} | | Esc |- выйти из режима выделения текста | ## Копирование/вставка из системного буфера обмена |Команда|Значение| |:---|:---| | :set paste |- вход в режим вставки | | :set nopaste |- выход из режим вставки | | Ctrl+Shift+V |- вставить в файл, если в режиме вставки; Command+Shift+V для Mac | ## Поиск и замена |Команда|Значение| |:---|:---| | /pattern |- поиск шаблона | | ?pattern |- обратный поиск шаблона | | \vpattern |- 'very magic' режим: все не алфавитно-цифровые символы интерпретируются как специальные (экранирование не требуется) | | n |- повторить поиск в том же направлении | | N |- повторить поиск в обратном направлении | | :#,#s/было/стало/g |-заменить все вхождения между двумя строками, где #,# -- номера этих строк | | :%s/было/стало/g |- заменить все вхождения шаблона в файл на указанное значение | | :%s/было/стало/gc |- заменить все вхождения шаблона в файл на указанное значение с подтверждением | | :noh |- отключить подсвечивание результатов поиска | Включение некоторых параметров при поиске: ``` set XXX ``` где XXX может принимать значения: * 'ic' 'ignorecase' - игнорирование регистра при поиске * 'is' 'incsearch' - отображение частичных совпадений при поиске * 'hls' 'hlsearch' - подсветка всех совпадений при поиске Для отключения параметров следует добавить 'no' перед параметром: ``` :set noic ``` ### Поиск в нескольких файлах |Команда|Значение| |:---|:---| | :vimgrep /pattern/{file} |- поиск по шаблону в нескольких файлах | | :cn |- переместиться к следующему совпадению | | :cp |- переместиться к предыдущему совпадению | | :copen |- открыть окно со списком результатов | ## Сворачивание |Команда|Значение| |:---|:---| | zf#j |- создает свертку от текущей позиции до # строк вниз | | zf/подстрока |- создает свертку от текущей позиции и до первой найденной подстроки | | v/V и zf |- выделение блока и создание свертки | ### Команды для управления: |Команда|Значение| |:---|:---| | zc |- свернуть блок | | zo |- развернуть блок | | zM |- закрыть все блоки | | zR |- открыть все блоки | | za |- инвертирование (если открыто – закрыть, если закрыто – открыть) | | zj |- переход к следующей свертке | | zk |- переход к предыдущей свертке | | zd |- удалить свертку под курсором | | zD |- удалить все свертки | | [z |- перейти к началу текущей свертки | | ]z |- перейти к концу текущей свертки | После закрытия Vim все свертки забываются, для сохранения сверток в открытом файле используется команда **:mkview**, для загрузки - **:loadview**. ## Работа с несколькими файлами |Команда|Значение| |:---|:---| | :e file |- редактировать файл в новом буфере | | :bnext либо :bn |- перейти к следующему буферу | | :bprev либо :bp |- перейти к предыдущему буферу | | :bd |- удалить буфер (закрыть файл) | | :ls |- список всех открытых буферов | | :sp file |- открыть файл в новом буфере и разделить окно | | :vsp file |- открыть файл в новом буфере и вертикально разделить окно | | Ctrl + ws |- разделить окно | | Ctrl + ww |- переключение окон | | Ctrl + wq |- закрыть окно | | Ctrl + wv |- разделить окно вертикально | | Ctrl + wh |- переместить курсор в левое окно (вертикально разделение) | | Ctrl + wl |- переместить курсор в правое окно (вертикальное разделение) | | Ctrl + wj |- переместить курсор в окно ниже (горизонтальное разделение) | | Ctrl + wk |- переместить курсор в окно выше (горизонтальное разделение) | ### Вкладки |Команда|Значение| |:---|:---| | :tabnew либо :tabnew file |- открыть файл в новой вкладке | | Ctrl + wT |- переместить текущее окно в собственную вкладку | | gt либо :tabnext либо :tabn |- переключиться на следующую вкладку | | gT либо :tabprev либо :tabp |- переключиться на предыдущую вкладку | | #gt |- переключить на вкладку номер # | | :tabmove # |- переместить текущую вкладку на # позицию (нумерация с 0) | | :tabclose либо :tabc |- закрыть текущую вкладку и все её окна | | :tabonly либо :tabo |- закрыть все вкладки кроме текущей | | :tabdo command |- выполнить command на всех вкладках (к примеру :tabdo q - закрывает все открытые вкладки) | ## Регистры |Команда|Значение| |:---|:---| | :reg |- показать содержимое регистров | | "xy |- поместить содержимое в регистр x | | "xp |- вставить содержимое регистра x | ## Метки :marks - список меток ma - установить метку A на текущей позиции `a - переместиться к метке A y`a - скопировать до метки A [[0_content|Оглавление]]