vim
Хоткеи
По коням!
отменить все изменения e! отмена предыдущего действия (undo) u, :u[ndo] выйти сохраняя wq либо ZZ выйти не сохраняя q! либо ZQ
Навигация
Набираем CTRL-g
, чтобы увидеть свое месторасположение в файле и информацию о файле.
Перейти в начало файла 1G либо gg Перейти к номеру строки 224 (224 как пример номера строки) Перейти в конец файла G Перемещение по файлу hjkl либо стрелками Перейтив начало слова b Перейтив конец слова e Начало предложения ( Конец предложения ) Начало абзаца { Конец абзацы } Начало строки ^ (суфикс) Конец строки $ Перейти к номеру строки 47 Shift+G # Где 47 номер строки Открыть встроенный файл-менеджер :e . Разбить окно и открыть встроенный файл менеджер :Sex Графический файл-менеджер :browse e Список буферов :ls Перейти в родительскую директорию :cd .. Список открытых файлов :args Открыть все файлы с расширением *.php :args *.php Показать список файлов с расширением php, содержащих в имени expression :grep expression *.php Открыть файл с именем, равным слову, находящемуся под курсором gf
Замена
Набираем r
и символ, заменяющий символ под курсором
Замена символа под курсором r Заменить слово cw Заменить символ cl Заменить строку cd Заменить до конца строки c$ Заменить до начала строки c^ Групповое коментирование Ctrl+v } I # Esc # вместо } можно несколько раз нажать j, или 10j, или использовать любую другую команду перемещения.
Копипаст
Вставить новую строку o скопировать строку yy скопировать слово yw скопировать символ yl перейти в режим копирования V выделить все ggVG скопировать выделенное y вставить после курсора p
Замена
:%s/old/new/g Заменить все вхождения "old" на "new" :%s/old/new/gw Заменить все вхождения "old" на "new" с запросом подтверждения :2,35s/old/new/g Заменить все вхождения "old" на "new" между 2 и 35 строками :5,$s/old/new/g Заменить все вхождения "old" на "new" начиная с 5 строки и до конца файла :%s/^/hello/g Добавить "hello" в начало каждой строки :%s/$/Harry/g Добавить "Harry" в конец каждой строки :%s/onward/forward/gi Заменить "onward" на "forward" с учетом регистра :%s/ *$//g Убрать все пробелы :g/string/d Удалить все строки, содержащие "string" :v/string/d Удалить все строки, не содержащие "string" :s/Bill/Steve/ Заменить первое вхождение "Bill" на "Steve" в текущей строке :s/Bill/Steve/g Заменить все вхождения "Bill" на "Steve" в текущей строке :%s/\r//g Убрать символ возврата каретки (Такие тексты обычно приходят от windows-пользователей) :%s#>[^<]\+>##g Очистить текст от HTML-тегов :%s/^\(.*\)\n\1$/\1/ Удалить строки, повторяющиеся дважды Ctrl+a Увеличить число под курсором на единицу Ctrl+x Уменьшить число под курсором на единицу ggVGg? Преобразовать текст в Rot13
Вырезание
Удалить символ x Вырезать строку dd Вырезать две строки 2dd Вырзать слово dw Вырезать символ dl Вырезать параграф dip Вырезать из текущего места до - до конца строки d$ Вырезать из текущего места до - до начала строки d^
Копирование блоками Первый способ. Пошаговая инструкция!
1. Переходим в visual mode v 2. выделяем текст от текущего положения курсора hjkl либо стрелками 3. копируем y
Второй способ. Построчное копирование. Пошаговая инструкция!
1. Нумеруем строки в файле относительно текущей позиции курсора :set relativenumber 2. Определяем количество строк которые нужно скопировать (например - 5) 3. копируем y5y копируем от текущей позиции до конца строки y$ скопировать слово yw
Метки
Пометить текущую позиция как k mk Перейти к метке k 'k Удалить все до метки k d'k
Поиск
Искать слово word сверху вниз (регистро-зависимо) /word Искать слово word (регистро-независимо) /\cword Искать слово word снизу вверх ?word Продолжение поиска n Искать "the" /\< the\> Искать слова, начинающееся на the /\< the Искать слова, заканчивающиеся на the /the\> Искать "john" или "joan" /jo[ha]n> Искать слова из четырех символов /\< .... \> Искать "fred" или "joe" /fred\|joe Искать 4 цифры подряд /\<\d\d\d\d\> Искать 3 пустые строки /^\n\{3} Искать во всех открытых файлах :bufdo /searchstr/
Взаимодействие с ОС
:!pwd Выполнить команду pwd и вернуться !!pwd Выполнить команду pwd и вставить результат в редактор :sh Открыть шелл $exit либо Ctrl + D Вернуться в редактор из шелла :. w !sh Выполнить текущую строку как команду оболочки (#n строку, если '.' заменить на n) :r!command Выполнить команду и вставить результат после текущей строки
Работа с файлами
Автоматическая подстановка пути к файлу
Ctrl+x Ctrl+f
# перемещение по выавшему списку путей
Ctrl+n Ctrl+p
Создание файла происходит также, как его редактирование
создаем файл :edit filename либо :vsplit filename записать новый файл :write :1,10 w outfile Записать в outfile с первой по десятую строки :1,10 w >> outfile Добавить в outfile с первой по десятую строки :r infile Вставить содержимое файла infile :23r infile Вставить содержимое файла infile после 23 строки
Перемещение по файловой системе
Перемещение по файловой системе :edit . Вернутся в файловую иерархю из редактируемого файла :edit . либо Ctrl + o
команды для работы в файловой иерархии
отображение даты и размера i переименовать файл R удалить файл D переход на уровень вверх - обратная сортировка r
Работа с несколькими файлами
Открываем несколько файлов в редакторе
vim first.txt second.txt
Для удобства можно отрыть файлы с вкладками
vim -p first.txt second.txt
переключение между файлами
перейти к следующему файлу :n вернуться к предыдущему файлу :prev
Открыть ещё один файл в открытом редакторе
Открыть ещё один файл :e Переключится меду файлами :e #
Вкладки
Создать новую вкладку :tabnew Перейти на следующую вкладку gt Перейти на первую вкладку :tabfirst Перейти на последнюю вкладку :tablast Изменить порядок вкладок :tabm n(position) Выполнить команду во всех вкладках :tabdo %s/foo/bar/g Поместить все открытые файлы во вкладки :tab ball
Сокращения (Аббревиатуры)
Определение аббревиатуры
Для создания аббревиатуру в Vim, используем команду :abbreviate
(которая сама может быть сокращена как :ab
) за которой следует аббревиатура и текст, которым вы хотите ее заменить.
:ab os operating system :ab mail user@domain.org Определить mail как сокращение от user@domain.org
По умолчанию, команда :abbreviate
создает аббревиатуру, которая работает в режимах вставки и команд. Но, также, мы можем использовать такие варианты, как :iab
– создание аббревиатуры, которая работает только в режиме вставки, либо только в командном режиме – :cab
.
Чтобы активировать аббревиатуру, вводим слово аббревиатуры, например, os (как в примере выше), за которым следует символ, не являющийся ключевым словом; например, мы можем использовать пробел или Enter.
Удаление аббревиатуры
Набираем :abб
без каких-либо параметров, чтобы увидеть список всех сокращений, определенных для текущего буфера. Чтобы удалить аббревиатуру, используем :unab
, за которой следует аббревиатура, либо :abc
чтобы очистите все аббревиатуры.
Макросы
q1 - начать запись макроса, который будет помещён в 1; q - закончить запись макроса; @1 - выполнить макрос из 1.
Выравнивание
Выровнять все строки :%!fmt Выровнять все строки в текущей позиции !}fmt Выровнять следующие 5 строк 5!!fmt
Сплит окна
создать сплит окно
Открыть пустое сплит окно Ctrl + w n горизонтальное разбиение :split вертикальное разбиение :vsplit Открыть новый файл :split filename
открыть несколько файлов в сплит окне
vim -o first.txt second.txt переключаться между окнами Ctrl + ww
расположение сплит окон
горизонтальное положение :windo wincmd K вертикальное положение :windo wincmd H # либо горизонтальное положение :ball вертикальное положение :vertical ball
Вдруг пригодится
Шифрование файла
vim -x secret.file
Отображение символов
табуляции, пробелов, конец строки и т.д.
:set list # включаем :set nolist # отключаем
Синхронизация директорий
Синхронизация директорий с помощью rsync. Добавим в .vimrc
map <C-r> :!rsync -avz /path/to/your/folder/or/file user@192.168.29.XX:~/path/to/destination/folder/
Теперь всякий раз, при нажатии Ctrl+r
, нам потребуется ввести пароль для ssh для синхронизации указанных каталогов.
Групповой сдвиг строк
v
– переходим в режим выделения;j
N-раз – выделяем необходимое кол-во строк;>
– что бы сместить вправо (< – влево).
Повышение привилегий в редакторе
Иногда при использовании vim мы можем обнаружить, что после открытия файла и внесения некоторых правок, мы не можем их записать, поскольку файл требует привилегий sudo. Тогда, мы вынуждены выходим из vim, открываем его снова с правами sudo и заново редактировать файл. Но, в этом кейсе нам поможет команда tee. Мы можем выполнить следующую команду в vim для записи в файл, требующий привилегий sudo:
:w !sudo tee %
Либо, для постоянной основы добавляем в .wimrc
и пользуемся комбинацией w!!
cmap w!! w !sudo tee % > /dev/null
Другие статьи
Настройка редактора, установка плагинов, etc
Поиск текста в less и vim
vim использование макросов для решения рутинных задач