Vim вставить строку в конец файла
Vim или его предшественник Vi предустановлен на macOS и почти во всех дистрибутивах Linux. Знание основ Vim полезно в ситуации, когда ваш любимый редактор недоступен.
В этой статье показано, как копировать, вырезать и вставлять в редакторе Vim / Vi.
Копирование, вырезание и вставка в нормальном режиме
Когда вы запускаете редактор Vim, вы находитесь в обычном режиме. В этом режиме вы можете запускать команды Vim и перемещаться по файлу.
Чтобы вернуться в нормальный режим из любого другого режима, просто нажмите Esc .
В Vim есть собственная терминология для копирования, вырезания и вставки. Копирование называется yank ( y ), вырезание называется delete ( d ), а вставка называется put ( p ).
Копирование (Янкинг)
Чтобы скопировать текст, поместите курсор в желаемое место и нажмите клавишу y а затем команду перемещения. Ниже приведены некоторые полезные команды восстановления:
Резка (Удаление)
Команды движения, применяемые для восстановления, также действительны для удаления. Например, dw удаляет до начала следующего слова, а d^ удаляет все от курсора до начала строки.
Склеивание (Вставка)
Чтобы поместить извлеченный или удаленный текст, переместите курсор в желаемое место и нажмите p чтобы вставить (вставить) текст после курсора, или P чтобы поместить (вставить) перед курсором.
Копирование, вырезание и вставка в визуальном режиме
Визуальный режим Vim позволяет выбирать текст и управлять им.
Поместите курсор на линию, с которой вы хотите начать копирование или резку.
Визуальный режим имеет три подтипа.
- Нажмите v чтобы войти в визуальный режим.
- Нажмите V чтобы войти в визуальный линейный режим, в котором текст выделяется построчно.
- Нажмите Ctrl+v чтобы войти в режим визуального блока. В этом режиме текст выделяется прямоугольными блоками.
Переход в визуальный режим также отмечает начальную точку выбора.
Переместите курсор в конец текста, который вы хотите скопировать или вырезать. Вы можете использовать команду перемещения или клавиши со стрелками вверх, вниз, вправо и влево.
Нажмите y чтобы скопировать, или d чтобы вырезать выделение.
Переместите курсор в то место, куда вы хотите вставить содержимое.
Нажмите P чтобы вставить содержимое перед курсором, или p чтобы вставить его после курсора.
Выводы
В этом руководстве мы показали вам, как копировать, вырезать и вставлять в Vim.
Если вы новичок в Vim, посетите сайт Open Vim, где вы можете попрактиковаться в Vim с помощью интерактивного руководства.
Текстовый редактор vim, созданный на основе более старого vi. Один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, возможными благодаря расширениям и надстройкам. По умолчанию входит в состав любого дистрибутива Linux.
Открываем файл с помощью vi / vim:
Основные режимы работы.
«Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Это - основной режим, только из него можно сразу перейти в другие режимы. Для возврата в основной режим из любого другого режима:
«Режим ввода» - ввод текста. Как только завершается ввод текста, принято сразу возвращаться в обычный режим. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Переход в него из обычного режима:
«Командный режим» - Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:
«Режим поиска» - ввод поискового запроса. Переход в него из обычного режима
«Визуальный режим» - режим выделения текста:
Перемещение по файлу
После загрузки Vim, на экране вы увидите часть загруженного вами текстового файла. Загрузившись, Vim находится в «командном режиме» - один из основных режимов. Это значит, что если вы нажмете клавишу <l> (строчная L), вместо появления «l» на месте курсора вы увидите, что курсор сдвинулся на один символ вправо. В командном режиме знаки, набираемые на клавиатуре, используются как команды для Vim, а не как помещаемые в текст символы. Команды перемещения - один из наиболее важных типов команд. Вот некоторые из них:
Ввод текста
Следующие команды переводят редактор в режим ввода:
Удаление и вставка
Ниже перечислены основные комманды удаления и вставки текста:
Отмена изменений
Поиск
Перейти на строку:
Выход
Есть еще пара команд, которые вам необходимо знать:
В этой статье описаны основные возможности, необходимые для работы. Практически во все дистрибутивы Linux входит учебник по работе с редактором, - просто введите в командной строке команду vimtutor.
/.viminfo, и будет восстановлено при следующем запуске vim.
Совет: В нулевом регистре всегда хранится содержимое последней команды копирования.Метки
- :marks - список меток
- ma - установить метку A на текущей позиции
- `a - переместиться к метке A
- y`a - скопировать до метки A
Макросы
- qa - записать макрос A
- q - остановить запись макроса
- @a - run macro a
- @@ - выполнить последний макрос
Вырезать и вставить
- yy - скопировать строку
- 2yy - скопировать 2 строки
- yw - скопировать слово
- y$ - скопировать до конца строки
- p - вставить буфер обмена после курсора
- P - вставить буфер обмена перед курсором
- dd - удалить (вырезать) строку
- 2dd - удалить (вырезать) 2 строки
- dw - удалить (вырезать) слово
- D - удалить (вырезать) до конца строки
- d$ - удалить (вырезать) до конца строки
- x - удалить (вырезать) символ
Выход и сохранение
- :w - сохранить файл, но не выходить
- :w !sudo tee % - сохранить файл с sudo
- :wq либо :x либо ZZ - сохранить файл и выйти
- :q - выйти (терпит неудачу в случае несохраненных изменений)
- :q! либо ZQ - выйти и потерять несохраненные изменения
Поиск и замена
- /pattern - поиск шаблона
- ?pattern - обратный поиск шаблона
- \vpattern - 'very magic' режим: все не алфавитно-цифровые символы интерпретируются как специальные (экранирование не требуется)
- n - повторить поиск в том же направлении
- N - повторить поиск в обратном направлении
- :%s/old/new/g - заменить все вхождения шаблона в файл на указанное значение
- :%s/old/new/gc - заменить все вхождения шаблона в файл на указанное значение с подтверждением
- :noh - отключить подсвечивание результатов поиска
Поиск в нескольких файлах
- :vimgrep /pattern/ - поиск по шаблону в нескольких файлах
- :cn - переместиться к следующему совпадению
- :cp - переместиться к предыдущему совпадению
- :copen - открыть окно со списком результатов
Сворачивание
Команды для управления:
После закрытия Vim все свертки забываются, для сохранения сверток в открытом файле используется команда :mkview , для загрузки - :loadview (подробнее).
Самое главное — побороть боязнь белого листа. Я всегда говорю это себе, когда нужно начать работу над чем-то и не знаешь, как подступиться. Так что я решил не ломать голову над тем, о чем будет первая запись в этом блоге, а просто выложить небольшую шпаргалку по текстовому редактору Vim.
Шпаргалка эта уже не первый месяц хранится у меня в
/txt/vim.txt. За это время я успел составить довольно объемный справочник по основным командам Vim. При желании вы можете начать свое обучение работе с Vim с этого поста.
/.vimrc
Можно редактировать файлы через сеть, например
:e <scp|ftp|ftps>://user@host/path/to/the/file.txt
:Ex или :e ./ - файловый менеджер
== Подсветка синтаксиса ==
:syntax on включить подсветку
:syntax off выключить подсветку (по умолчанию)
== Перенос строк ==
:set wrap разрешить word wrap (по умолчанию)
:set nowrap запретить word wrap
== Печать ==
:ha[rdcopy] распечатать документ
:set printoptions=duplex:off отключить двустороннюю печать
== Сворачивание ==
zc свернуть блок
zo развернуть блок
zM закрыть все блоки
zR открыть все блоки
za инвертирование
zf см :set foldmethod=manual
:set foldenable включить свoрачивание
:set foldmethod=syntax сворачивание на основе синтаксиса
:set foldmethod=indent сворачивание на основе отступов
:set foldmethod=manual выделяем участок с помощью v и говорим zf
:set foldmethod=marker сворачивание на основе маркеров в тексте
:set foldmarker=bigin,end задаем маркеры начала и конца блока
== Маркеры ==
ma установить локальный маркер a
mB установить глобальный маркер B
`c перейти к локальному маркеру c
`0 вернуться на позицию, на которой закончили
работу при закрытии vim
:marks просмотр маркеров
set viminfo='1000,f1 маркеры пишутся в
/.viminfo, восстанавливаясь
при следующем запуске vim. маркер " хранит
последнюю позицию курсора в файле
== Сессии ==
mksession file.session сохранить текущую сессию
source file.session восстановить ранее сохраненную сессию
== Макросы ==
qa записать макрос с именем a
q в режиме записи макроса: закончить запись
@a выполнить макрос с именем a
@@ повторить последний макрос
== Регистры ==
"ayy скопировать строку в регистр a
"bdd вырезать строку и поместить в регистр b
"С2d вырезать три строки и дописать в конец
регистра C
:reg [name1][name2][. ] просмотреть содержимое регистров
== Выделение ==
v + hjkl выделение текста
SHIFT + v выделить строку
CTR + v выделение прямоугольника
p вставить
y копировать
d удалить
gu к нижнему регистру
gU к верхнему регистру
== Поиск по всему проекту ==
:vimgrep /EXPR/ **/*.c поиск по регулярному выражению
:copen показать все найденные места
:close скрыть все найденные места
:cn переход к следующему результату
:cp переход к предыдущему результату
== Нумерация строк ==
:set number включить нумерацию строк
:set nonumber отключить нумерацию строк
== Работа с окнами ==
:split горизонтальное разбиение
:vsplit вертикальное разбиение
Ctr+W, затем
с закрыть окно
+- изменение высоты текущего окна
<> изменение ширины текущего окна
= установить равный размер окон
hjkl или стрелочки перемещение между окнами
== Проверка орфографии ==
mkdir -p
:set spell spelllang=ru,en включить проверку орфографии
:set nospell выключить проверку орфографии
]s следующее слово с ошибкой
[s предыдущее слово с ошибкой
z= замена слова на альтернативу из списка
zg good word
zw wrong word
zG ignore word
== Другое ==
:set [no]wildmenu При авто-дополнении в командной строке над
ней выводятся возможные варианты
:set list Отображать табуляцию и переводы строк
q: История команд
. Повторение последней команды
Более подробный материал об использовании текстового редактора Vim вы найдете в книге Изучаем редакторы vi и Vim, 7-е издание. Книга доступна как в бумажном, так и в электронном формате.
На этом пока все. Думаю, я буду время от времени редактировать эту шпаргалку, так что следите за PS в конце следующих постов.
Выбрать синтаксис редактируемого файла
Способы перейти в режим вставки
- i - вставить текст слева от текущего
- I - вставить текст в начало строки
- a - вставить текст справа от текущего символа
- A - вставить текст в конец текущей строки
- o - создать новую строку под текущей
- O - создать новую строку над текущей
- C - заменить всё до конца строки
- r - заменить 1 символ
- 3 s - удалить 3 символа и перейти в режим вставки
- c i W - заменить большое слово под курсором
- c i " - заменить текст между кавычками
- c i ( - заменить текст между круглыми скобками
- g i - перейти к последнему месту, где производилось редактирование
Передвижение по тексту
- 4 d d - удалить 4 строки
- 3 x - удалить 3 символа
- D - удалить от текущей позиции до конца строки
Способы сложного выделения текста
- v % - когда курсор установлен на одной из скобок - выделит всё до её пары.
- v i b - выделить всё между двумя ближайшими к курсору круглыми скобками
- v i B - выделить всё между двумя ближайшими к курсору фигурными скобками
- v i " - выделить всё между двумя ближайшими двойными кавычками
- v i ' - выделить всё между двумя ближайшими одинарными кавычками
- g g V G - выделить весь файл
- Ctrl + v - выделять прямоугольником
Заменить все вхождения 'old' на 'new'
Заменить все вхождения 'old' на 'new' с запросом подтверждения
Удалить все строки, не содержащие 'string'
Удаление всех пустых строк в VIM
Сокращения для быстрого создания закомментированных участков кода
Заставить вим не раскрывать табы при редактировании makefile
Открыть файл, но предопределить синтаксис редактора
Редактировать последний изменённый файл
Убрать символ переноса строки ^M в файле из windows двумя способами. ^M вводится как Ctrl-V Ctrl-M.
Заменить "foo" на "bar" в строках 127-215
С текущей строки до конца файла объеденить все строки в одну
Оба вида записи указывают на весь файл целиком
Начиная с текущей, удалить в следующих 21-ой строках те, что содержат слово foo
Начиная с текущего места и до конца файла удалить все строки что НЕ содержат "bar"
Все строки, что содержат "foo" перенести в конец файла, в том же порядке, в каком они встречаются по документу
Все строки, что начинаются с пробела, объединить с предыдущими
Во всех строках содержащих "foo", заменить "bar" на "zzz"
Между метками 'a' и 'b', объединить строки, что содержат 'foo' с теми что идут после них.
Вставка содержимого из другого места
- :r file.txt - прочитать и вставить содержимое файла 'file.txt' в место под курсором
- :0r file.txt - вставить файл в начало документа
- :$r file.txt - вставить файл в конец документа
- :r !uptime - вставить вывод команды в место под курсором
Дописать содержимое буфера в конец другого файла
Отсортировать весь файл с помощью sort
увеличить/уменьшить число под курсором на 1
Ctrl + a
Ctrl + x
Изменить регистр символа под курсором на противоположный
Объединить текущую строку со следующей
В режиме вставки, комбинация Ctrl + R позволяет вставлять некоторые полезные вещи:
- " - последний удалённый/скопированный текст
- % - текущее имя файла
- * - содержимое буфера обмена (X11: primary selection)
- + - содержимое буфера обмена
- / - последний запрос поиска
- : - последняя команда
- . - последний вставленный текст
- - - последний маленький удалённый текст (меньше строки)
- =5*5 - вставит 25. Мини калькулятор
Дополнить слово в режиме вставки
Ctrl + p
Ctrl + n
Путешествие по результатам поиска.
Переход будет осуществляться по местам, которые были указаны явно: - поиск с помощью / - переход g g , G , [\d] G Так же будут открываться другие файлы, где осуществлялись подобные действия.
Ctrl + o
Ctrl + i
Работа с сессиями
Работа со встроенным файловым менеджером. Вызвать его можно командой :Explore или попытавшись открыть на редактирование каталог :sp ./
- - - перейти на каталог выше
- m f - пометить файл
- D - удалить помеченые файлы. Удалит файл под курсором, если помеченых нет
- R - переименовать файл под курсором
- d - создать новый каталог
- % - создать новый файл
работа с несколькими окнами
- Ctrl + w v - разбить окно по вертикали
- Ctrl + w s - разбить окно по горизонтали
- Ctrl + w w - переключиться между окнами
- Ctrl + w - перейти к окну левее, ниже, выше, правее
- Ctrl + w < ,+,->- изменить размеры текущего окна
- Ctrl + w q - закрыть окно
Проставить отступы для всего документа
Для того чтобы это работало - надо добавить в .vimrc следующую строку:
filetype plugin indent on
Копируем содержимое строк выше/ниже курсора, не покидая режима вставки
- Ctrl + y - вставить символ над курсором
- Ctrl + e - вставить символ под курсором
Отбросить правки до последнего сохранённого состояния
- Q - войти в ex-режим
- :vi - выйти из ex-режима
Удалить все строки что не содержат слова "git"
Для всех строк, что содержат слово git добавить в начало '>>' и в конец ' :g/git/norm I>> ctrl + v esc A<<
Читайте также: