David Rayner (zzapper) 15 Years of Vi + 7 years of Vim and still learning © ← O_O

Выбрать синтаксис редактируемого файла

:set ft=ruby

Способы перейти в режим вставки


  • i - вставить текст слева от текущего
  • I - вставить текст в начало строки
  • a - вставить текст справа от текущего символа
  • A - вставить текст в конец текущей строки
  • o - создать новую строку под текущей
  • O - создать новую строку над текущей
  • C - заменить всё до конца строки
  • r - заменить 1 символ
  • 3s - удалить 3 символа и перейти в режим вставки
  • ciW - заменить большое слово под курсором
  • ci" - заменить текст между кавычками
  • ci( - заменить текст между круглыми скобками
  • gi - перейти к последнему месту, где производилось редактирование

Передвижение по тексту


  • fx - Передвинуть курсор вперед к следующему вхождению символа х в текущей строке
  • tx - Передвинуть курсор вперед к следующему вхождению символа х в текущей строке и установить курсор перед символом x
  • Fx - Передвинуть курсор назад к предыдущему вхождению символа х в текущей строке
  • w - Передвинуть курсор вперед на одно слово
  • b - Передвинуть курсор назад на одно слово
  • 0 - Передвинуть курсор на начало текущей строки
  • ^ - Передвинуть курсор на первый символ в текущей строке
  • $ - Передвинуть курсор на конец текущей строки
  • * - начать поиск по слову под курсором
  • # - начать поиск по слову под курсором в обратном порядке
  • w - перейти к следующему слову
  • W - перейти к следующему большому слову (тому, что разделено пробелом)
  • b/e - перейти к началу/концу текущего слова
  • B/E - перейти к началу/концу текущего большого слова
  • gg/G - перейти в начало/конец файла
  • % - перейти к парной скобке
  • {/} - перейти к следующему/предыдущему параграфу
  • '. - перейти к последнему месту, где производилось редактирование

Удаление данных


  • 4dd - удалить 4 строки
  • 3x - удалить 3 символа
  • D - удалить от текущей позиции до конца строки

Способы сложного выделения текста


  • v% - когда курсор установлен на одной из скобок - выделит всё до её пары.
  • vib - выделить всё между двумя ближайшими к курсору круглыми скобками
  • viB - выделить всё между двумя ближайшими к курсору фигурными скобками
  • vi" - выделить всё между двумя ближайшими двойными кавычками
  • vi' - выделить всё между двумя ближайшими одинарными кавычками
  • ggVG - выделить весь файл
  • Ctrl+v - выделять прямоугольником

Заменить все вхождения 'old' на 'new'

:%s/old/new/g

Заменить все вхождения 'old' на 'new' с запросом подтверждения

:%s/old/new/gw

Удалить все строки, не содержащие 'string'

:v/string/d

Удаление всех пустых строк в VIM

:g/^$/d

Сокращения для быстрого создания закомментированных участков кода

:ab #b /*************************************************  
:ab #e *************************************************/

Заставить вим не раскрывать табы при редактировании makefile

# vim: set tabstop=4 shiftwidth=4 noexpandtab:

Открыть файл, но предопределить синтаксис редактора

$ vim "+set filetype=lisp" file.rb

Отправить весь буфер вима в grep

:%!grep data

Редактировать последний изменённый файл

$ vim `ls -t | head -n1`

Убрать символ переноса строки ^M в файле из windows двумя способами. ^M вводится как Ctrl-V Ctrl-M.

:set ff=unix
:w

:%s/^M//g 

Заменить "foo" на "bar" в строках 127-215

:127,215s/foo/bar

С текущей строки до конца файла объеденить все строки в одну

:.,$j

Оба вида записи указывают на весь файл целиком

:1,j 
:%

Начиная с текущей, удалить в следующих 21-ой строках те, что содержат слово foo

:.,+21g/foo/d

Начиная с текущего места и до конца файла удалить все строки что НЕ содержат "bar"

:.,$v/bar/d

Все строки, что содержат "foo" перенести в конец файла, в том же порядке, в каком они встречаются по документу

:%g/foo/m$

Все строки, что начинаются с пробела, объединить с предыдущими

:%g/^ /-1j

Во всех строках содержащих "foo", заменить "bar" на "zzz"

:%g/foo/s/bar/zzz/g

Между метками 'a' и 'b', объединить строки, что содержат 'foo' с теми что идут после них.

:'a,'bg/foo/j

Вставка содержимого из другого места


  • :r file.txt - прочитать и вставить содержимое файла 'file.txt' в место под курсором
  • :0r file.txt - вставить файл в начало документа
  • :$r file.txt - вставить файл в конец документа
  • :r !uptime - вставить вывод команды в место под курсором

Дописать содержимое буфера в конец другого файла

:w >>~/file.txt

Отсортировать весь файл с помощью sort

:%!sort

увеличить/уменьшить число под курсором на 1


Ctrl+a
Ctrl+x

Изменить регистр символа под курсором на противоположный


~

Объединить текущую строку со следующей


J

В режиме вставки, комбинация Ctrl+R позволяет вставлять некоторые полезные вещи:


  • " - последний удалённый/скопированный текст
  • % - текущее имя файла
  • * - содержимое буфера обмена (X11: primary selection)
  • + - содержимое буфера обмена
  • / - последний запрос поиска
  • : - последняя команда
  • . - последний вставленный текст
  • - - последний маленький удалённый текст (меньше строки)
  • =5*5 - вставит 25. Мини калькулятор

Дополнить слово в режиме вставки


Ctrl+p
Ctrl+n

Путешествие по результатам поиска.
Переход будет осуществляться по местам, которые были указаны явно: - поиск с помощью / - переход gg, G, [\d]G Так же будут открываться другие файлы, где осуществлялись подобные действия.


Ctrl+o
Ctrl+i

Работа с сессиями

Сохраняем

:mks sessionname
" или принудительно:
:mks! sessionname

Загружаем

$ vim -S sessionname

Работа со встроенным файловым менеджером. Вызвать его можно командой :Explore или попытавшись открыть на редактирование каталог :sp ./


  • - - перейти на каталог выше
  • mf - пометить файл
  • D - удалить помеченые файлы. Удалит файл под курсором, если помеченых нет
  • R - переименовать файл под курсором
  • d - создать новый каталог
  • % - создать новый файл

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

:!python %

работа с несколькими окнами


  • Ctrl+wv - разбить окно по вертикали
  • Ctrl+ww - переключиться между окнами
  • Ctrl+w{h,j,k,l} - перейти к окну левее, ниже, выше, правее

Проставить отступы для всего документа


gg=G

Для того чтобы это работало - надо добавить в .vimrc следующую строку:
filetype plugin indent on

Копируем содержимое строк выше/ниже курсора, не покидая режима вставки


  • Ctrl+y - вставить символ над курсором
  • Ctrl+e - вставить символ под курсором

Отбросить правки до последнего сохранённого состояния

:e!


  • Q - войти в ex-режим
  • :vi - выйти из ex-режима

Удалить все строки что не содержат слова "git"

:v/git/d
:g!/git/d

Для всех строк, что содержат слово git добавить в начало '>>' и в конец '<<'. После слова norm - можно написать любую vim команду. В данном случае - 'I' - вставить в начало строки, 'A' - в конец.


:g/git/norm I>>ctrl+vescA<<
-----------
-----------