Vim
Введение
Редактор vi или vim много где стоит по умолчанию. Например, в
OpenBSD
Многие не любят его, но часто нет выхода. Если Вы занимаетесь
тестированием
какого-то сервера и нужно залезть в логи - вряд ли
Вам разрешать установить что-то своё. А по дефолту может стоять как раз vi.
Так что лучше разобраться с помощью этого руководства и сэкономить своё время.
Полную версию мануала можно изучить
здесь
Установка Vi
В Debian , Ubuntu и других deb
sudo apt install vim
В CentOS , Rocky , RHEL и других rpm
sudo yum install vim
Советую обновлять vim сразу после установки новой системы. Редактор по умолчанию может быть довольно глючным.
Основные приёмы
vi интуитивно непонятен, поэтому пока Вы не освоили хотя бы несколько команд, работать в нём будет просто невозможно
Я не шучу. Первое, что нужно запомнить: существует несколько режимов работы:
1) Командный режим (Command mode) включается по умолчанию и в нём НЕЛЬЗЯ редактировать текст в привычном понимании.
Можно удалять или копировать строки, но написать что-то или удалять по одному символу нельзя.
2) Режим вставки (Insert mode) в нём можно редактировать текст, но сперва туда нужно попасть.
Чтобы в него перейти нужно нажать
i. Чтобы выйти из него обратно в Command Mode нужно нажать ESC.
3)
Допустим Вы хотите изменить какой-то файл.
Откройте его, нажмите i, внесите изменения, нажмите i ещё раз. Нажмите Esc. Нажмите :.
Нажмите w. Нажмите q. Нажмите Enter.
Копировать строку
yy
Копировать десять строк
y10
ENTER
Вставить строку/строки
Вставить предварительно скопированную строку под текущей
p
Вставить предварительно скопированную строку над текущей
P
Вставить пустую строку над текущей можно с помощью заглавной O
SHIFT + o
Вставить пустую строку под текущей
o
Удалить строку/строки
Удалить строку (после комбинации клавишь может потребоваться нажатие Enter)
dd
Удалить десять строк
d10
ENTER
Удалить от курсора до конца файла
d G
ENTER
Перейти в режим редактирования
i
Выйти из режима вставки
Esc
Сохранить изменения
:wq
Выйти без сохранения
:q!
Отменить изменения
:e!
Вырезать и вставить строку
Коротко:
CTRL → SHIFT + v → d → p
Подробно:
Предположим в /etc/hosts
нужно перенести строку, которая выбивается из общего порядка.
Для этого нужно
переместить курсор
на эту строку
10.1.102.141 eth1.ru 10.1.102.159 topbicycle.ru 10.1.102.162 test.com 10.1.102.150 heihei.ru 10.1.102.164 eth1.ru
Нажать
CTRL
Затем нажать заглавную V
SHIFT + v
10.1.102.141 eth1.ru 10.1.102.159 topbicycle.ru 10.1.102.162 test.com 10.1.102.150 heihei.ru 10.1.102.164 eth1.ru
Затем нажать
d
10.1.102.141 eth1.ru 10.1.102.159 topbicycle.ru 10.1.102.162 test.com 10.1.102.164 eth1.ru
10.1.102.141 eth1.ru 10.1.102.159 topbicycle.ru 10.1.102.162 test.com 10.1.102.164 eth1.ru
Переместить курсор на строку после которой нужно вставить вырезанную
10.1.102.141 eth1.ru 10.1.102.159 topbicycle.ru 10.1.102.162 test.com 10.1.102.164 eth1.ru
Нажать
p
10.1.102.141 eth1.ru 10.1.102.150 heihei.ru 10.1.102.159 topbicycle.ru 10.1.102.162 test.com 10.1.102.164 eth1.ru
Перемещение курсора
Пока Вы НЕ зашли в Insert Mode Вы можете двигать курсор клавишами H - влево, J - вниз, K - вверх, L - вправо.
Таким образом в Command Mode мы можем двигать курсор как стрелками таки клавишами как на фото внизу.
Чтобы переместить курсор в начало строки нажмите
^
Чтобы переместить курсор в конец строки нажмите
$
Чтобы переместить курсор в конец файла нажмите
G
Чтобы переместить курсор в начало файла нажмите
gg
Чтобы переместить курсор на строку номер 10 нажмите
10G
Чтобы переместить курсор в начало строки с табуляцией нажмите
CTRL + d
CTRL d подвинет курсор вместе с текстом. В примере курсор сейчас в конце 3-й строки
1 #!/bin/bash 2 mmm 3 mmm 4 mmm 5 mmm
После нажатия CTRL d
1 #!/bin/bash 2 mmm 3 mmm 4 mmm 5 mmm
Редактирование файла
Отменить последние изменения можно нажав u
Дописать
i | - добавляет перед |
a | - добавляет после |
I | - добавляет в начало строки |
A | - добавляет в конец строки |
Рассмотрим файл в котором одна строка 12345 и курсор стоит на 3.
12345
Будем нажимать Esc и ставить курсор на 3 затем одну из клавиш i, a, I, A, затем 0. Потом 0 удаляем.
ESC → i → 0
120345
ESC → a → 0
123045
ESC → I → 0
012345
ESC → A → 0
123450
d - Удалить
Рассмотрим файл со строкой
one two three four five
Поставим курсор на t в слове three
Удалить одно слово
dw
one two four five
Удалить до конца строки
d$
one two
Удалить всю строку
dd
Изменить регистр
Изменить регистр одного символа можно с помощью ~
Изменить регистр всей строки на противоположный:
Поставить курсор в начало строки и нажать g~~:
^
g~~
Всю строку в верхний регистр:
^
gUU
Скопировать часть файла в другой файл.
Рассмотрим файл
greeting
1 Thank you for visiting 2 www.eth1.ru 3 or one of it's forks such as: 4 5 eth1.ru - lightweight no JS site 6 devhops.ru - full fork of IT content 7 answerit.ru - API for QA lessons 8 aredel.com - English translation
Скопируем строки 5, 6 и 7 в файл sites
:5,7w sites
cat sites
eth1.ru - lightweight no JS site devhops.ru - full fork of IT content answerit.ru - API for QA lessons
Скопировать текст из файла можно с помощью r
touch newsites
vi newsites
:r sites
Пример редактирования файла
Допустим, мы хотим добавить русский язык в
Debian
Linux
.
Мы открываем файл /etc/default/keyboard командой
sudo vi /etc/default/keyboard
Кнопкой j опускаемся на строку
XKBLAYOUT="us"
Кнопкой l двигаем курсор на символ s
Нажимаем кнопку a - от слова add - добавить.
Пишем
, ru
Так, чтобы получилось
XKBLAYOUT="us,ru"
Нажимаем ESC, чтобы вернуться в командный режим.
Кнопками h j k l переводим курсор на первую "
в строке
XKBOPTIONS=""
Нажимаем a
Пишем
grp:ctrl_shift_toggle
Так, чтобы получилось
XKBOPTIONS="grp:ctrl_shift_toggle"
Нажимаем ESC
Нажимаем :wq
Нажимаем ENTER
vi сделал своё дело, а Вам скорее всего нужно будет перезагрузиться, чтобы язык добавился.
Поиск по файлу
Поиск вперёд
/
Поиск назад
?
Перейти к следующему результату
n
Перейти к предыдущему результату
N
sed в vim
Можно выполнять команды
sed
прямо в редакторе
Нужно нажать ESC, затем : ввести % и после него команду
:%s/bad/good/g
Затем нажать ENTER и всё плохое будет заменено на всё хорошее.
Если сразу после выполнения команды нажать u её действие будет отменено.
При выполнении команд с указанием определённых строк % нужен.
Заменить bad на good только в строках 3 и 4 можно командой
:3,4s/bad/good/g
Закомментировать несколько строк сразу
С помощью sed комманд можно закомментировать и раскомментировать несколько строк сразу
На примере GNUmakfile для управления VirtualBox
vi GNUmakefile
# UBUNTU
LINUX_REPO="mirror.yandex.ru/ubuntu-releases"
LINUX_VERSION=20.04.3
# LINUX_ISO=ubuntu-$(LINUX_VERSION)-desktop-amd64.iso
LINUX_ISO=ubuntu-$(LINUX_VERSION)-live-server-amd64.iso
LINUX_URL=https://$(LINUX_REPO)/$(LINUX_VERSION)/$(LINUX_ISO)
OS_TYPE=Ubuntu_64
Закомментировать строки с 20 по 25 можно нажав ESC и выполнив следующую команду
:20,25s/^/#
# UBUNTU
#LINUX_REPO="mirror.yandex.ru/ubuntu-releases"
#LINUX_VERSION=20.04.3
## LINUX_ISO=ubuntu-$(LINUX_VERSION)-desktop-amd64.iso
#LINUX_ISO=ubuntu-$(LINUX_VERSION)-live-server-amd64.iso
#LINUX_URL=https://$(LINUX_REPO)/$(LINUX_VERSION)/$(LINUX_ISO)
#OS_TYPE=Ubuntu_64
Раскомментировать эти строки (20 - 25)
:20,25s/^#//
vim завис
Если vim завис попробуйте нажать
ESC
И написать
Exit
Проверить версию
Достаточно просто выполнить команду vi или vim
vi
~ ~ ~ ~ VIM - Vi IMproved ~ ~ version 8.1.3741 ~ by Bram Moolenaar et al. ~ Modified by team+vim@tracker.debian.org ~ Vim is open source and freely distributable ~ ~ Help poor children in Uganda! ~ type :help iccf<Enter> for information ~ ~ type :q<Enter> to exit ~ type :help<Enter> or <F1> for on-line help ~ type :help version8<Enter> for version info ~ ~ ~
Нумерация строк
Включить/выключить нумерацию строк
Включить
:set number
1 Thank you for visiting 2 www.eth1.ru 3 or one of it's forks such as: 4 5 eth1.ru - lightweight no JS site 6 devhops.ru - full fork of IT content 7 answerit.ru - API for QA lessons 8 aredel.com - English translation
Выключить
:set nonumber
invnumber
:set invnumber
Чтобы сделать изменения постоянными нужно внести их в файл .vimrc
vimrc
Файл с настройками vim обычно можно открыть выполнив
vi /etc/vim/vimrc
Ещё один вариант - создать файл .vimrc в домашней директории пользователя.
cd
vi .vimrc
set showmode number nohlsearch set ai ts=4 expandtab abbr _sh #!/bin/bash nmap <C-N> :set invnumber<CR>
Пояснения:
set ai ts=4
устанавливает табуляцию равной 4 пробелам.
abbr _sh #!/bin/bash
позволяет набрав _sh + TAB получить #!/bin/bash
nmap <C-N> :set invnumber<CR>
позволяет включать и выключать нумерацию строк нажатием
CTRL + N
Основы работы с редактором VIM |
IDE | |
Vim | |
Vimtutor | |
Neovim | |
Установка vim в Windows | |
VSC | |
Sublime | |
Bash | |
Linux | |
man по vim |