Vim вставить строку в конец файла
«Для меня vi это Дзен.
Использование vi — это практика дзена.
Каждая команда является коаном.
Полный смысла для пользователя,
Бессмысленный для непосвященного.
Вы познаете истину каждый раз когда вы его используете.»
--reddy@lion.austin.
на сколько хорошо ты знаешь язык vim?
посмотри на клавиатуру,
можешь ли ты сказать что выполняет каждая буква?
как много ты знаешь?
как много используешь?
Доброго всем времени суток, я хотел бы написать цикл статей о работе с редактором vim, это моя первая статья (совсем совсем первая) и я хотел бы начать с азов: режиме вставки, режиме команд, загрузке и сохранении файлов и тп. Он предназначен помочь новичкам развить свои навыки, с помощью которых они смогут использовать vim более эффективно.
Итак, для vim имеет три режима:
решим комманд — копирование\вставка\удаление\форматирование текст и тп
режим вставки — режим ввода текста
режим выделения — ясно из названия =)
Esc — отмена текущего действия\выход в режим команд
При открытии файла вы автоматически попадаете в режим команд, с него и начнем.
ты используешь h/j/k/l для перемещения?
или до сих пор живешь в мире «GUIarrows ?»
если да — переучись
сохрани для себя бесконечные километры движений до стрелок и «home» клавиш
В основном, вы должны тратить как можно меньше времени в режиме вставки, потому что этот режим действует как тупой редактор. Именно поэтому новички проводят так много времени в режиме вставки — он делает использование vim проще. Но настоящая мощь vim скрыта в использовании командного режима! Вы поймете: чем вы лучше знаете vim, тем меньше времени вы будете проводить в режиме вставки.
Выход и сохранение
- :w - сохранить файл, но не выходить
- :w !sudo tee % - сохранить файл с sudo
- :wq либо :x либо ZZ - сохранить файл и выйти
- :q - выйти (терпит неудачу в случае несохраненных изменений)
- :q! либо ZQ - выйти и потерять несохраненные изменения
Используйте комбинации для перемещения курсора в текущей строке
Большинство редакторов имеют только простые команды для перемещения курсора (влево, вправо, вверх, вниз, в начало линии и в ее конец, и тп). Vim имеет очень продвинутые команды для управления курсором; эти команды называются комбинациями(orig: «motions»). Когда курсор передвигается от одной точки текста в другой, текст между этими точками (включая их самих) считается «пропущенным»(orig: «moved over»)(этот термин будет важен позже)
fx передвинуть курсор вперед (forward) к следующему вхождению символа x в текущей строке(конечо же x — любой символом). Это безумно полезная команда. Вы можете напечатать; для того что бы повторить последнюю команду f, которою вы ввели.
tx тоже что и описанною выше, но при этом курсор устаналивается прямо перед символом, а не на сам символ.
Fx передвинуть курсор назад (backward) к спредыдущему вхождению символа x в текущей строке
w передвинуть курсор вперед на одно слово
b передвинуть курсор назад на одно слово
0 передвинуть курсор на начало текущей строки
^ передвинуть курсор на первый символ в текущей строке
$ передвинуть курсор на конец текущей строки
Метки
- :marks - список меток
- ma - установить метку A на текущей позиции
- `a - переместиться к метке A
- y`a - скопировать до метки A
Удаление и вставка
Ниже перечислены основные комманды удаления и вставки текста:
Склеивание (Вставка)
Чтобы поместить извлеченный или удаленный текст, переместите курсор в желаемое место и нажмите p чтобы вставить (вставить) текст после курсора, или P чтобы поместить (вставить) перед курсором.
Визуальные команды
Вырезать и вставить
- yy - скопировать строку
- 2yy - скопировать 2 строки
- yw - скопировать слово
- y$ - скопировать до конца строки
- p - вставить буфер обмена после курсора
- P - вставить буфер обмена перед курсором
- dd - удалить (вырезать) строку
- 2dd - удалить (вырезать) 2 строки
- dw - удалить (вырезать) слово
- D - удалить (вырезать) до конца строки
- d$ - удалить (вырезать) до конца строки
- x - удалить (вырезать) символ
Режим вставки - вставка/добавление текста
- i - вставка перед курсором
- I - вставка в начало строки
- a - вставка (добавление) после курсора
- A - вставка (добавление) в конец строки
- o - добавление новой строки под текущей
- O - добавление новой строки над текущей
- ea - вставка (добавление) после конца слова
- Esc - выход из режима вставки
Копирование (Янкинг)
Чтобы скопировать текст, поместите курсор в желаемое место и нажмите клавишу y а затем команду перемещения. Ниже приведены некоторые полезные команды восстановления:
- yy — Янкнуть (скопировать) текущую строку, включая символ новой строки.
- 3yy — 3yy (копирование) трех строк, начиная с строки, в которой находится курсор.
- y$ — копировать (копировать) все от курсора до конца строки.
- y^ — Янкинг (копирование) всего от курсора до начала строки.
- yw — Янкнуть (копировать) до начала следующего слова.
- yiw — yiw (скопировать) текущее слово.
- y% — Янкнуть (копировать) на соответствующий символ. По умолчанию поддерживаются пары () , <> и [] . Полезно для копирования текста между совпадающими скобками.
Регистры
- :reg - показать содержимое регистров
- "xy - поместить содержимое в регистр x
- "xp - вставить содержимое регистра x
Совет: Содержимое регистров сохраняется в ~/.viminfo, и будет восстановлено при следующем запуске vim.
Выделение текста (визуальный режим)
- v - включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)
- V - включить построчный режим выделения
- o - переместиться на другой конец выделенной области
- Ctrl + v - включить режим выделения блоков
- O - переместить на другой угол блока
- aw - выделить слово
- ab - блок в ()
- aB - блок в <>
- ib - внутренний блок в ()
- iB - внутренний блок в <>
- Esc - выйти из режима выделения текста
Копирование, вырезание и вставка в нормальном режиме
Когда вы запускаете редактор Vim, вы находитесь в обычном режиме. В этом режиме вы можете запускать команды Vim и перемещаться по файлу.
Чтобы вернуться в нормальный режим из любого другого режима, просто нажмите Esc .
В Vim есть собственная терминология для копирования, вырезания и вставки. Копирование называется yank ( y ), вырезание называется delete ( d ), а вставка называется put ( p ).
Поиск и замена
- /pattern - поиск шаблона
- ?pattern - обратный поиск шаблона
- \vpattern - 'very magic' режим: все не алфавитно-цифровые символы интерпретируются как специальные (экранирование не требуется)
- n - повторить поиск в том же направлении
- N - повторить поиск в обратном направлении
- :%s/old/new/g - заменить все вхождения шаблона в файл на указанное значение
- :%s/old/new/gc - заменить все вхождения шаблона в файл на указанное значение с подтверждением
- :noh - отключить подсвечивание результатов поиска
Сворачивание
Команды для управления:
После закрытия Vim все свертки забываются, для сохранения сверток в открытом файле используется команда :mkview , для загрузки - :loadview (подробнее).
Самое главное — побороть боязнь белого листа. Я всегда говорю это себе, когда нужно начать работу над чем-то и не знаешь, как подступиться. Так что я решил не ломать голову над тем, о чем будет первая запись в этом блоге, а просто выложить небольшую шпаргалку по текстовому редактору Vim.
Шпаргалка эта уже не первый месяц хранится у меня в ~/txt/vim.txt. За это время я успел составить довольно объемный справочник по основным командам Vim. При желании вы можете начать свое обучение работе с Vim с этого поста.
Файл настройки: ~/.vimrc
Можно редактировать файлы через сеть, например
:e
: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 или стрелочки перемещение между окнами
: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 в конце следующих постов.
При работе с текстовыми файлами копирование, вырезание и вставка текста — одна из наиболее часто выполняемых задач.
Vim или его предшественник Vi предустановлен на macOS и почти во всех дистрибутивах Linux. Знание основ Vim полезно в ситуации, когда ваш любимый редактор недоступен.
В этой статье показано, как копировать, вырезать и вставлять в редакторе Vim / Vi.
Перемещение по файлу
После загрузки Vim, на экране вы увидите часть загруженного вами текстового файла. Загрузившись, Vim находится в «командном режиме» - один из основных режимов. Это значит, что если вы нажмете клавишу (строчная L), вместо появления «l» на месте курсора вы увидите, что курсор сдвинулся на один символ вправо. В командном режиме знаки, набираемые на клавиатуре, используются как команды для Vim, а не как помещаемые в текст символы. Команды перемещения - один из наиболее важных типов команд. Вот некоторые из них:
Вырезание и вставка из режима визуального выделения
Вероятно, после того как вы выделите какой-то участок текста, у вас возникнет желание что-либо с ним сделать, иначе зачем бы вам понадобилось его выделять? Вот несколько полезных команд которые можно использовать над выделенным участком текста:
d вырезать(удалить) выделенный текст и поместить его в буфер обмена
y скопировать (yank) помеченный текст в буфер обмена
c вырезать помеченный текст и поместить его в буфер обмена. Эта команда действует аналогично команде d, но оставляет редактор в режиме вставки
Эффективный переход в режим вставки
Сколькими методами ты можешь перейти в режим вставки?
давай посмотрим i I o O s S a A c C?
и r R для полного ассортимента
и это только одиночные буквы.
Большинство новых пользователей vim переходят в режим вставки с помощью нажатия клавиши i. Это работает, но часто довольно неэффективно, поэтому vim имеет несколько команд для перехода в режим вставки. Перечислим несколько самых популярных:
i вставить текст слева от текущего
I вставить текст в начало строки
a вставить текст справа от текущего символа
A вставить текст в конец текущей строки
o создать новую строку под текущей и вставить текст в новую строку
O создать новую строку над текущей и вставить текст в новую строку
c удалить текст помеченый как «пропущенный» и вставить текст для замены. Например c$ удалит текст от позиции курсора до конца строки и перейдет в режим вставки (проще говорят c = change что означает изменить). Удаленный текст перенесется в буфер обмена и в последствии может быть вставлен
d тоже что и c, но без перехода в режим вставки (d — delete)
Выводы
В этом руководстве мы показали вам, как копировать, вырезать и вставлять в Vim.
Если вы новичок в Vim, посетите сайт Open Vim, где вы можете попрактиковаться в Vim с помощью интерактивного руководства.
Отмена изменений
Вырезание и вставка из режима не визуального выделения
Если вы знаете что вам необходимо вырезать или скопировать, то вы можете совершить данные операции без перехода в режим визуального выделения. Это сбережет ваше время
d — вырезать текст помеченный как «пропущенный» и поместить его в буфер обмена. Например команда dw вырежет слово, а команда dfS вырежет текст начиная с позиции курсора и заканчивая следующим символом S, который встретится в текущей строке, включая сам символ S
y скопировать «пропущенный» текст
c вырежет «пропущенный» текст и оставит редактор в режиме вставки
dd вырежет текущую строку
yy скопиует текущую строку
cc вырежет текущую строку и оставит редактор в режиме вставки
D вырежет текст от позиции курсора и до конца текущей строки
Y скопировать весь текст, подобно yy. (Это конечно нестандартно, вы можете использовать y$ для действияя которое вы могли ожидать от команды Y)
C вырезать текст от курсора до конца строки и оставить редактор в режиме вставки
x вырезать текущий символ (действует подобно backspaсe)
s вырезать текущий символ и оставить редактор в режиме вставки
Для вставки поместите курсор в место куда вы хотите вставить текст и нажмите на клавишу p
Копирование, вырезание и вставка в визуальном режиме
Визуальный режим Vim позволяет выбирать текст и управлять им.
Поместите курсор на линию, с которой вы хотите начать копирование или резку.
Визуальный режим имеет три подтипа.
- Нажмите v чтобы войти в визуальный режим.
- Нажмите V чтобы войти в визуальный линейный режим, в котором текст выделяется построчно.
- Нажмите Ctrl+v чтобы войти в режим визуального блока. В этом режиме текст выделяется прямоугольными блоками.
Переход в визуальный режим также отмечает начальную точку выбора.
Переместите курсор в конец текста, который вы хотите скопировать или вырезать. Вы можете использовать команду перемещения или клавиши со стрелками вверх, вниз, вправо и влево.
Нажмите y чтобы скопировать, или d чтобы вырезать выделение.
Переместите курсор в то место, куда вы хотите вставить содержимое.
Нажмите P чтобы вставить содержимое перед курсором, или p чтобы вставить его после курсора.
Макросы
- qa - записать макрос A
- q - остановить запись макроса
- @a - run macro a
- @@ - выполнить последний макрос
Используйте визуальное выделение и подходящий режим выделения
Существуют три основных режима визуального выделения (режимы подсветки текста). Эти режимы активируются следующим образом:
v посимвольный режим выделения. Этот режим используется большинством людей, поэтому попробуйте попрактиковаться перед тем как пробовать остальные.
V построчный режим выделения. В этом режиме выделяются всегда целые линии. Это намного удобнее в случае если вы хотите выделить несколько линий
>c-v блочный режим выделения. Безумно мощное средство, доступное в небольшом количестве редакторов. Вы можете выделить прямоугольный блок с любым текстом внутри и он будет подсвечен.
Все обычные команды управления курсором также работают. Например команда vwww — переведет vim в режим посимвольного визуального редактирования и выделит следующие три слова. Команда Vjj — переведет vim в режим посимвольного визуального редактирования и выделит текущую строку и две строки под ней.
Используйте h, j, k и l
Первым шагом к эффективному редактированию будет отвыкание от использования клавиш курсора. Одним из преимуществ модульного дизайна vim — это то что вам нет надобности перемещать свои руки назад-впред между клавишами курсора и обычными клавишами; когда в в режиме команд буквы h, j, k, l соответствуют направлениям влево, вниз, вверх и вправо. Конечно, необходимо некоторое время для практики, но вы увидите разницу в скорости как только попробуете.
Используйте h, j, k и l
Первым шагом к эффективному редактированию будет отвыкание от использования клавиш курсора. Одним из преимуществ модульного дизайна vim — это то что вам нет надобности перемещать свои руки назад-впред между клавишами курсора и обычными клавишами; когда в в режиме команд буквы h, j, k, l соответствуют направлениям влево, вниз, вверх и вправо. Конечно, необходимо некоторое время для практики, но вы увидите разницу в скорости как только попробуете.
Ввод текста
Следующие команды переводят редактор в режим ввода:
Поиск слов в тексте
Поиск
Перейти на строку:
Эффективно передвигаемся по файлу
как ты двигаешься
в начало\конце файла? gg/G
на 100, 1546, n-ю строку? 100G, 1546G, nG
на первый не пустой символ в строке? ^
в следуйщей строке? >CR в предыдущей? — (минус)
Vim имеет множество команд, которые могут вас послать в любое место (так что не обижайтесь если что=), в вашем файле — очень редко возникает необходимость прокручивать вручную сквозь дебри текста.
Вот несколько ииз наиболее полезных движений:
>c-f&rt передвинуться вперед(forward) на один экран
>c-b&rt переместиться назад(backward) на один экран
G передвинуть курсор в конец файла
numG передвинуть курсор на линию номер num( например, 10G передвинуть курсор на линию номер 10)
gg переместить курсор в начало файла
H передвинуть курсор наверх экрана
M передвинуть курсор в центр экрана
L передвинуть курсор вниз экрана
так же вы можете расставлять метки в буфере:
m — создать метку , указывающую на текущую позицию курсора.
` — установить курсор на метке . Обратите внимание — ковычка обратная `
' — установить курсор на одну линию с меткой `. или '. — установить курсор в позицию где были произведены последние изменения (разницу между ` и ' см выше)
`` — переход между двумя последними позициями
— метка будет локальной
— глобальной
:marks — выводит список все меток
Для тех кто намертво сегодня ночью решил таки слезть с notepad++ (простите, для тех кто еще не сталкивался с метками) я хотел бы привести небольшой псевдо пример, забегая немного на перед:
только напишу, что
u — undo
>c-R — rendo
открываем c:\windows\system.ini
5G — идем на 5-ю сточку
ma — ставим марку «a»
15G — идем на 15-ю стоку
c'a — меняем текст по своему усмотрению
после произведенных изменений идем в режим команд (Esc)
10G — см выше
mb — см выше
d'b — d = delete
опять идем в режим вставки
>c-v < — режим выделения (о нем чуть позже, просто хочу показать всю мощь вима)
4j — j — сдвиг курсора вниз nj — означает повторить сдвиг n раз
4>> — сдвиг текста вправо, n>> аналогично nj
20G — идем на 20-ю строчку
='a — чудеса авто-форматирования? =)
идем в режим вставки
:q! — выйти не сохраняя изменений
если вы считаете что вим уже освоен — нужно вводить просто :wq (не советую, но попробовать можно)
Используем авто-завершение слов.
Vim имеет очень хорошую систему авто-дополнения слов. Это означает что вы можете напечатать часть длинного слова, нажимаете клавишу и vim завершает слово за вас. Например если у вас есть переменная называющаяся iAmALongAndAwkwardVarName где-либо в вашем коде, вы вероятнее всего не очень захотите печатать целиком такое имя при каждом использовании.
Для использования авто-завершения слов просто напечатайте несколько первых букв (например iAmAL) и нажмите >c-n< либо >c-p
Основные режимы работы.
«Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Это - основной режим, только из него можно сразу перейти в другие режимы. Для возврата в основной режим из любого другого режима:
«Режим ввода» - ввод текста. Как только завершается ввод текста, принято сразу возвращаться в обычный режим. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Переход в него из обычного режима:
«Командный режим» - Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:
«Режим поиска» - ввод поискового запроса. Переход в него из обычного режима
«Визуальный режим» - режим выделения текста:
Резка (Удаление)
В обычном режиме d — клавиша для вырезания (удаления) текста. Переместите курсор в желаемое положение и нажмите клавишу d , а затем команду перемещения. Вот несколько полезных команд для удаления:
- dd — Удалить (вырезать) текущую строку, включая символ новой строки.
- 3dd — Удалить (вырезать) три строки, начиная с линии, в которой находится курсор,
- d$ — Удалить (вырезать) все от курсора до конца строки.
Команды движения, применяемые для восстановления, также действительны для удаления. Например, dw удаляет до начала следующего слова, а d^ удаляет все от курсора до начала строки.
Поиск в нескольких файлах
- :vimgrep /pattern/ - поиск по шаблону в нескольких файлах
- :cn - переместиться к следующему совпадению
- :cp - переместиться к предыдущему совпадению
- :copen - открыть окно со списком результатов
Использование счетчиков
Счетчики — это очередной мощный и сохраняющий ваше время инструмент. Любые команды могут быть предварены числом. Это число указывает сколько раз необходимо повторить команду. Вот несколько примеров:
3j переведет курсор на 3 строки вниз
10dd удалить 10 строк
y3f" скопирует текст от курсора до третьей кавычки после курсора на текущей строке.
всем спасибо за внимание
если честно — то я хотел написать больше (не затронул тему макросов, регистров, дополнительных модулей и тп), но из ходя из объема, я думаю пока что будет достаточно
если у меня хватит кармы — обещаю напсать продолжение =)
от себя добавлю — тяжело в учении легко в бою, по началу для меня вим казался чем-то ужасно сложным и нагроможденным, постоянно чего-то хотел, не давал просто вводить текст =)
сейчас — я просто не могу набирать текст где-то в блокноте и тп. Даже почту отсылаю через вим.
ps незаметно для всех хочу подблагодорить человека кто в первый познакомил меня linux'oм и с vim'ом, можно сказать благодоря ему родилась эта статья, thank you Roman Romanchuck, к сожелению давно с тобой не общался
pss просьба — не пинайте сильно, плохо пишу, но стараюсь!!
Текстовый редактор vim, созданный на основе более старого vi. Один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, возможными благодаря расширениям и надстройкам. По умолчанию входит в состав любого дистрибутива Linux.
Открываем файл с помощью vi / vim:
Редактирование
- r - заменить один символ
- J - присоединить нижнюю строку к текущей
- cc - заменить всю строку
- cw - заменить всё текущее слово
- c$ - заменить до конца строки
- s - удалить символ и заменить текст
- S - удалить строку и заменить текст (то же что cc)
- xp - переставить две буквы (удалить и вставить)
- u - отменить
- Ctrl + r - применить последнее отменённое изменение
- . - повторить последнюю команду
Удивительная команда .
В vim, нажатие . (точка) будет вызывать повторение последней введенной команды. Например, если последняя команда была dw(удалить слово), после нажатия. в режиме команд vim удалит еще одно слово.
Выход
Есть еще пара команд, которые вам необходимо знать:
В этой статье описаны основные возможности, необходимые для работы. Практически во все дистрибутивы Linux входит учебник по работе с редактором, - просто введите в командной строке команду vimtutor.
Совет: Добавьте число перед командой перемещения курсора для того, чтобы повторить её. Например, 4j перемещает курсор на 4 строки вниз.
Читайте также: