Редактор vim
Общие сведения
vi копирует содержимое редактируемого файла в буфер ( выделяемая область в памяти ), отображает буфер ( ту часть, которая помещается на экране), позволяет удалять, добавлять, редактировать содержимое буфера. После сохранения содержимое буфера сохраняется в файл заменяя содержимое файла
В vim существует два основных режима: режим редактирования ( переход с помощью esc ) и режим вставки ( переход с помощью клавиш i или s )
Ввод команд начинается с двоеточия
Базовые команды входа и выхода с сохранением и без сохранения
#Открыть файл, новый или существующий
vim test.txt
#Указывать имя файла необязательно, достаточно просто открыть буфер и после добавления данных сохранить этот буфер указав имя файла
vim
:wq test.txt
#Выход с перезаписью существующего с таким же именем файла
vim
:wq! test.txt
#Просто выход
:q
#Выход с сохранением
:wq
#Или
:ZZ
#Выход без сохранения
:q!
#Отменить все изменения и вернуться к первоначальной версии файла в текущем сеансе
:e!
#После попытки сохранить файл который уже существует file exist
#В таком случае можно перезаписать существующий файл содержимым из буфера
:w!
#Если нет разрешения на перезапись существующего файла Permision denied
#В таком случае можно создать новый файл командой
:w /home/user/newfile
#Просмотр свободного места где можно сохранить файл
:!df
#Из редактора можно выполнять другие команды linux
:!ls
Перемещение курсора
Перед переключением курсора необходимо переключиться на латиницу и нажать esc
W - на одно слово вперед без учета знаков припинания
w - на одно слово вперед
b - одно слово назад
2b - два слова назад
2w - два слова вперед
h - один символ назад
2h - два символа назад
l - один символ вперед
2l - символа вперед
k - одна строка вверх 3k - три строки вверх
j - 1 строка вниз
30j - 30 строк вниз
0 - в начало строки
$ - в конец строки
10$ - в конец 10 строки от начала курсора
{ } - перемещение вверх и вниз
20G - Найти 20 строку
gg - в начало документа
G - в конец документа
Правка текста
i - режим вставки
a - режим добавления, похож на i
c - для изменения необходимо выделить слово или текст и нажать c, после чего ввести новое значение. Либо cw, далее вставить текст + esc
r - замена символа
d - для удаления
x - удаления символа или выделения
Переход в режим вставки с помощью клавиши a, в отличии от клавиши i, позволяет начинать ввод текста после курсора
Изменять текст можно с помощью клавиши c (change), в отличии от клавиши d, она удаляет выделенный фрагмент текста и сразу переходит в режим ввода Например:
Изменить последнее слово слева от курсора: cb
Изменить последние два слова слева от курсора: c2b
Изменить до начала строки: c0
Изменить фрагмент слова: cw
Изменить всю строку: cc, в отличии от сочетания dd, команда удалит всю строку и курсор останется на прежнем месте, не удаляя пустую строку
Еще один способ замена можно реализовать с помощью команды r
Эта команда заменяет отдельный символ, после правки нужно нажать esc, чтобы вернуться в командный режим
Можно заменить сразу несколько символов, если выделить символы, которые необходимо заменить
Замена подстроки
${string/substring/replacement}
Заменяется первой вхождение substring строки string строкой replacement
${string//substring/replacement}
Заменяются все вхождения substring строки string строкой replacement
${string/#substring/replacement}
Подстановка строки $replacement вместо $substring. Поиск ведется с начала строки $string
${string/%substring/replacement}
Подстановка строки $replacement вместо $substring. Поиск ведется с конца строки $string
#1 способ
echo ${str/abc/456}
123456ABC
#2 способ, замена всех вхождений
echo ${str//abc/456}
123456ABC456DEF123456
#3 способ,
Подстановка параметров
В отдельных случаях при возникновении неодназначности интерпретации, для подстановки параметров будет правильнее использовать форму записи ${parameter}
#Яркий пример
PATH=${PATH}:/opt/bin #Добавление /opt/bin в $PATH
Числа перед командой
К текстовым объектам команд c d y можно добавлять числа.
Например команда d2w или 2dw удаляют два слова
(command)(number)(text object)
или
(number)(command)(text object)
Команда C
Команда C меняет символы от текущей позиции курсора до конца строки.
Альтернативный вариант, использование сочетания команды c индикатором конца строки c$
Подстановка текста
Команда s - заменяет отдельный символ, можно перед s добавить число символов
Команда S - заменяет всю строку, и переводя пользователя в режим вставки с начала строки, в отличии от команды C, которая удалет от начала текущего положения курсора
Команда R - как и строчный аналог, заменяет текст, начиная от текущего положения курсора
Смена регистра
Для смены регистра буквы с текущем положении курсора можно использовать тильду ~
Удаление
Команда d удаляет выделенный фрагмент или строку, если нажать d 2 раза или нажать D
Напимер сочетание d2w удалит 2 слова после курсора
Удалить первые две строки можно с помощью сочетания 2dd
Команда D удаляет символы до конца строки начиная от положения курсора
x удаляет символ в положении курсора
X удаляет символ перед курсором
5x удалит 5 символов справа от курсора
Перемещение текста
При удлении текстового блока c помощью команды d, он сохраняется в буфере, содержимое которого можно вставить в любом месте файла с помощью команды p
Перестановка двух букв
Команда xp удаляет текущий символ и вставляет его перед следующим символом, таким образом меняя буквы местами
С помощью команд y и p можно скопировать текст любого размера
Копирование текста
Команда y ( копировать ) может сочетаться с любой из команд перемещения yw, y$, 4yy
Команда yy действует на всю строку аналогично командам dd и cc
Команда Y скопирует всю строку
Команда p вставляет текст из буфера на следующую строку
Команда P вставляет текст на этой же строке
Можно копировать и вставлять текст в один из 26 именованных буферов
Повторение или отмена последней команды
Выполненная команда хранится в буфере до вызова следующей, поэтому ее можно повторить еще раз с помощью точки( . )
Вставка текста
Команда I включает режим вставки в начале строки
Команда A включает режим вставки в конец строки
Команда o создает пустую строку после текущей строки и переводит туда курсор
Команда O создает пустую строку перед текущей строкой и переводит туда курсор
s - удаляет текущий символ и переходит в режим вставки
S - удаляет строку и переходит в режим вставки
R - замена текущего символа
s эквивалентна двухклавишной команде c SPACE, а S – это то же, что и cc
Самое полезное применение s - замена одного символа несколькими
Числовые аргументы у команд вставки
Команда 50i* ESC добавит 50 звездочек начиная с позиции курсора
Команда 50i*_ ESC добавит по 25 звездочек и дефисов
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
Команда 10r8 Enter заменит 10 символов восьмеркой
8888888888*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
Команда 2S заменит 2 строки и перейдет в режим вставки
Команда 2с удалит 2 строки
Команда 10s удалит 10 символов и перейдет в режим вставки
Команда 10сw удалит 10 слов и перейдет в режим вставки
Объединение строк
Команда J исползуется для объединения текущей строки со следующей строкой
Основные команды
Команды редактирования
Объект Изменение Удаление Копирование
Слово cw dw yw
Два слова без пункт. 2cW 2dW 2yW или y2W
На три слова назад 3cb 3db 3yb
Одна строка cc dd yy или Y
До конца строки c$ d$ и D y$
До начала строки с0 d0 y0
Один символ r x и X y1 или yh
Пять символов 5s 5x 5y1
Перемещение
h, j, k, l - перемещение по одному символу, аналогично стрелкам
+ - на первый символ следующей строки
- - на первый символ предыдущей строки
e или E - вперед в конец слова
w или W - вперед в начало слова
b или B - назад в начало слова
0 - в начало строки
$ - в конец строки
Другие операции
p - поместить текст из буфера после строки
P - поместить текст из буфера перед строкой
ZZ- сохранить изменения и выйти
:q! - выйти не сохраняя изменений
Создание и изменение текста
i - вставить текст в текущей позиции
I - вставить текст в начале строке
a - вставить текст после курсора
A - вставить текст в конце строки
o - создать пустую строку после текущей строки и вставить текст
O - создать пустую строку перед текущей строкой и вставить текст
S - удалить строку и вставить текст
R - заменить текущий символ
J - объединить текущую строку со следующей
~ - поменять регистр
U - вернуть строку в первоначальное состояние
Перемещение внутри экрана
H - переход в начало экрана
M - переход в середину экрана
L - переход на последнюю строку экрана
nH - переход на n строк ниже начала экрана
nL - переход на n строк выше нижней строки экрана
Перемещение по строкам
ENTER или + - переход на первый символ следующей строки
- - переход на первый символ предыдущей строки
n| - переход на n-й символ в текущей строке
e - перемещение в конец слова
E - перемещение в конец слова игнорируя пунктуацию
( - перемещение в начало предложения
) - перемещение в начало следующего предложения
{ - перемещение в начало текущего абзаца
} - перемещение в начало следующего абзаца
[[ или ]] - перемещение в конец и начало текущего раздела
Макросы задающие абзацы и разделы можно переопределить командой :set
Перемещение по результам поиска
Поиск начинается с обратной косой черты /шаблон + Enter
n и N перемещение по результам поиска
Для поиска в обратном направлении используется ?шаблон вместо /
Чтобы выключить циклический поиск ( повторый поиск с начала ), необходимо включить опцию nowrapscan
:set nowrapscan
d?move - удаление текста вверх от текущего положения курсора до слова move
Поиск в строке
fx - поиск первого вхождения x, чтобы продолжить поиск необходимо нажать ;
FX - найти предыдущее вхождение x
tx - найти символ и переместить перед ним курсор
Tx - найти предыдущее вхождение и переместить после него курсор
; - продолжить поиск
, - продолжить поиск в обратном направлении
dfx - удалит все до первого вхождения
Перемещение по номеру строки
Отобразить номера строк можно с помощью команды :set nu
Команда ctrl + G - показывает номер текущей строки
44G - переместит курсор на строку с номером 44, ввод обратных кавычек вернет курсор в начальное положение
Источники
Здесь пока нет комментариев