Vim как выделить текст
Выбрать синтаксис редактируемого файла
:set ft=ruby
Способы перейти в режим вставки
- i — вставить текст слева от текущего
- I — вставить текст в начало строки
- a — вставить текст справа от текущего символа
- A — вставить текст в конец текущей строки
- o — создать новую строку под текущей
- O — создать новую строку над текущей
- C — заменить всё до конца строки
- r — заменить 1 символ
- 3 s — удалить 3 символа и перейти в режим вставки
- c i W — заменить большое слово под курсором
- c i » — заменить текст между кавычками
- c i ( — заменить текст между круглыми скобками
- g i — перейти к последнему месту, где производилось редактирование
Передвижение по тексту
- f x — Передвинуть курсор вперед к следующему вхождению символа х в текущей строке
- t x — Передвинуть курсор вперед к следующему вхождению символа х в текущей строке и установить курсор перед символом x
- F x — Передвинуть курсор назад к предыдущему вхождению символа х в текущей строке
- w — Передвинуть курсор вперед на одно слово
- b — Передвинуть курсор назад на одно слово
- 0 — Передвинуть курсор на начало текущей строки
- ^ — Передвинуть курсор на первый символ в текущей строке
- $ — Передвинуть курсор на конец текущей строки
- * — начать поиск по слову под курсором
- # — начать поиск по слову под курсором в обратном порядке
- w — перейти к следующему слову
- W — перейти к следующему большому слову (тому, что разделено пробелом)
- b / e — перейти к началу/концу текущего слова
- B / E — перейти к началу/концу текущего большого слова
- g g / G — перейти в начало/конец файла
- % — перейти к парной скобке
- < / >— перейти к следующему/предыдущему параграфу
- ‘ . — перейти к последнему месту, где производилось редактирование
- 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’
:%s/old/new/g
Заменить все вхождения ‘old’ на ‘new’ с запросом подтверждения
:%s/old/new/gw
Удалить все строки, не содержащие ‘string’
:v/string/d
Удаление всех пустых строк в VIM
Сокращения для быстрого создания закомментированных участков кода
:ab #b /************************************************* :ab #e *************************************************/
Заставить вим не раскрывать табы при редактировании makefile
# vim: set tabstop=4 shiftwidth=4 noexpandtab:
Открыть файл, но предопределить синтаксис редактора
$ vim "+set filetype=lisp" file.rb
Отправить весь буфер вима в grep
:%!grep data
Редактировать последний изменённый файл
$ vim `ls -t | head -n1`
Убрать символ переноса строки ^M в файле из windows двумя способами. ^M вводится как Ctrl-V Ctrl-M.
:set ff=unix :w :%s/^M//g
Заменить «foo» на «bar» в строках 127-215
:127,215s/foo/bar
С текущей строки до конца файла объеденить все строки в одну
Оба вида записи указывают на весь файл целиком
Начиная с текущей, удалить в следующих 21-ой строках те, что содержат слово foo
. +21g/foo/d
Начиная с текущего места и до конца файла удалить все строки что НЕ содержат «bar»
. $v/bar/d
Все строки, что содержат «foo» перенести в конец файла, в том же порядке, в каком они встречаются по документу
:%g/foo/m$
Все строки, что начинаются с пробела, объединить с предыдущими
:%g/^ /-1j
Во всех строках содержащих «foo», заменить «bar» на «zzz»
:%g/foo/s/bar/zzz/g
Между метками ‘a’ и ‘b’, объединить строки, что содержат ‘foo’ с теми что идут после них.
:'a,'bg/foo/j
Вставка содержимого из другого места
- :r file.txt — прочитать и вставить содержимое файла ‘file.txt’ в место под курсором
- :0r file.txt — вставить файл в начало документа
- :$r file.txt — вставить файл в конец документа
- :r !uptime — вставить вывод команды в место под курсором
Дописать содержимое буфера в конец другого файла
:w >>~/file.txt
Отсортировать весь файл с помощью sort
:%!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
Работа с сессиями
:mks sessionname " или принудительно: :mks! sessionname
$ vim -S sessionname
Работа со встроенным файловым менеджером. Вызвать его можно командой :Explore или попытавшись открыть на редактирование каталог :sp ./
- — — перейти на каталог выше
- m f — пометить файл
- D — удалить помеченые файлы. Удалит файл под курсором, если помеченых нет
- R — переименовать файл под курсором
- d — создать новый каталог
- % — создать новый файл
отправить текущий файл на исполнение питоном
:!python %
работа с несколькими окнами
- 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»
:v/git/d :g!/git/d
Для всех строк, что содержат слово git добавить в начало ‘>>’ и в конец ‘ :g/git/norm I>> ctrl + v esc A
- 2-3 — habrahabr.ru
- 2-5, 16-25, 27, 29-38 — stackoverflow.com
- 6-8 — xtips.ru
- 9 — xtips.ru
- 10 — citkit.ru
- 13 — habrahabr.ru
- 15 — chesser.ru
- www.rayninfo.co.uk — лучшие подсказки по vim
- vimdoc.sourceforge.net — документация по vim онлайн
- vim.wikia.com
- vimbits.com — Куча трюков из vimrc
- bytefluent.com — просмотр и составление цветовой схемы для vim
На главную | По любым вопросам: zendzirou@gmail.com Исходный код сайта: gh:najomi/najomi.org Данные: gh:najomi/data |
Шпаргалка по Vim
Совет: Добавьте число перед командой перемещения курсора для того, чтобы повторить её. Например, 4j перемещает курсор на 4 строки вниз.
Режим вставки — вставка/добавление текста
- i — вставка перед курсором
- I — вставка в начало строки
- a — вставка (добавление) после курсора
- A — вставка (добавление) в конец строки
- o — добавление новой строки под текущей
- O — добавление новой строки над текущей
- ea — вставка (добавление) после конца слова
- Esc — выход из режима вставки
Редактирование
- r — заменить один символ
- J — присоединить нижнюю строку к текущей
- cc — заменить всю строку
- cw — заменить всё текущее слово
- c$ — заменить до конца строки
- s — удалить символ и заменить текст
- S — удалить строку и заменить текст (то же что cc)
- xp — переставить две буквы (удалить и вставить)
- u — отменить
- Ctrl + r — применить последнее отменённое изменение
- . — повторить последнюю команду
Выделение текста (визуальный режим)
- v — включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)
- V — включить построчный режим выделения
- o — переместиться на другой конец выделенной области
- Ctrl + v — включить режим выделения блоков
- O — переместить на другой угол блока
- aw — выделить слово
- ab — блок в ()
- aB — блок в <>
- ib — внутренний блок в ()
- iB — внутренний блок в <>
- Esc — выйти из режима выделения текста
Визуальные команды
- > — сместить текст вправо
- < - сместить текст влево
- y — скопировать выделенный текст
- d — удалить выделенный текст
- ~ — переключить регистр
Регистры
- :reg — показать содержимое регистров
- «xy — поместить содержимое в регистр x
- «xp — вставить содержимое регистра x
Совет: Содержимое регистров сохраняется в ~/.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 либо 😡 либо ZZ — сохранить файл и выйти
- :q — выйти (терпит неудачу в случае несохраненных изменений)
- :q! либо ZQ — выйти и потерять несохраненные изменения
Поиск и замена
- /pattern — поиск шаблона
- ?pattern — обратный поиск шаблона
- \vpattern — ‘very magic’ режим: все не алфавитно-цифровые символы интерпретируются как специальные (экранирование не требуется)
- n — повторить поиск в том же направлении
- N — повторить поиск в обратном направлении
- :%s/old/new/g — заменить все вхождения шаблона в файл на указанное значение
- :%s/old/new/gc — заменить все вхождения шаблона в файл на указанное значение с подтверждением
- :noh — отключить подсвечивание результатов поиска
Поиск в нескольких файлах
- :vimgrep /pattern/ — поиск по шаблону в нескольких файлах
Например: :vimgrep /foo/ **/*
- :cn — переместиться к следующему совпадению
- :cp — переместиться к предыдущему совпадению
- :copen — открыть окно со списком результатов
Сворачивание
- zf#j — создает свертку от текущей позиции до # строк вниз
- zf/подстрока — создает свертку от текущей позиции и до первой найденной подстроки
- v/V и zf — выделение блока и создание свертки
Команды для управления:
После закрытия Vim все свертки забываются, для сохранения сверток в открытом файле используется команда :mkview , для загрузки — :loadview (подробнее).
Работа с несколькими файлами
- :e file — редактировать файл в новом буфере
- :bnext либо :bn — перейти к следующему буферу
- :bprev либо :bp — перейти к предыдущему буферу
- :bd — удалить буфер (закрыть файл)
- :ls — список всех открытых буферов
- :sp file — открыть файл в новом буфере и разделить окно
- :vsp file — открыть файл в новом буфере и вертикально разделить окно
- Ctrl + ws — разделить окно
- Ctrl + ww — переключение окон
- Ctrl + wq — закрыть окно
- Ctrl + wv — разделить окно вертикально
- Ctrl + wh — переместить курсор в левое окно (вертикально разделение)
- Ctrl + wl — переместить курсор в правое окно (вертикальное разделение)
- Ctrl + wj — переместить курсор в окно ниже (горизонтальное разделение)
- Ctrl + wk — переместить курсор в окно выше (горизонтальное разделение)
Вкладки
- :tabnew либо :tabnew file — открыть файл в новой вкладке
- Ctrl + wT — переместить текущее окно в собственную вкладку
- gt либо :tabnext либо :tabn — переключиться на следующую вкладку
- gT либо :tabprev либо :tabp — переключиться на предыдущую вкладку
- #gt — переключить на вкладку номер #
- :tabmove # — переместить текущую вкладку на # позицию (нумерация с 0)
- :tabclose либо :tabc — закрыть текущую вкладку и все её окна
- :tabonly либо :tabo — закрыть все вкладки кроме текущей
- :tabdo command — выполнить command на всех вкладках (к примеру :tabdo q — закрывает все открытые вкладки)
Основные команды текстового редактора VI / VIM
Текстовый редактор vim, созданный на основе более старого vi. Один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации, возможными благодаря расширениям и надстройкам. По умолчанию входит в состав любого дистрибутива Linux.
Открываем файл с помощью vi / vim:
vim test.txt vi test.txt
Основные режимы работы.
«Обычный режим» — перемещение по файлу, стирание текста и другие редактирующие функции. Это — основной режим, только из него можно сразу перейти в другие режимы. Для возврата в основной режим из любого другого режима:
, иногда 2 раза;
«Режим ввода» — ввод текста. Как только завершается ввод текста, принято сразу возвращаться в обычный режим. Заметьте, что стирание и ввод текста происходит в двух разных режимах. Переход в него из обычного режима:
«Командный режим» — Команды (операции с файлом, поиск и замена, настройка редактора…). Переход в него из обычного режима:
«Режим поиска» — ввод поискового запроса. Переход в него из обычного режима
/ , поиск от курсора до конца документа ? , поиск от курсора до начала документа
«Визуальный режим» — режим выделения текста:
"v" и влево или вправо стрелками; Shift+v вся строка целиком; Ctrl+v прямоугольник, часть текста.
Перемещение по файлу
После загрузки Vim, на экране вы увидите часть загруженного вами текстового файла. Загрузившись, Vim находится в «командном режиме» — один из основных режимов. Это значит, что если вы нажмете клавишу (строчная L), вместо появления «l» на месте курсора вы увидите, что курсор сдвинулся на один символ вправо. В командном режиме знаки, набираемые на клавиатуре, используются как команды для Vim, а не как помещаемые в текст символы. Команды перемещения — один из наиболее важных типов команд. Вот некоторые из них:
Для перемещения курсора нажмите клавиши h,j,k,l так, как показано ниже: ^ k Советы: Клавиша h находится слева и перемещает влево. < h l >Клавиша l находится справа и перемещает вправо. j Клавиша j похожа на стрелку "вниз". v - на страницу (экран) вниз; - на страницу (экран) верх; - на пол страницы (экрана) вниз; - на пол страницы (экрана) верх; - на строку вниз, без изменения положения курсора; - на строку верх, без изменения положения курсора; 0 («ноль») - в начало текущей строки; ^ - в начало текущей строки (к первому непробельному символу); $ - в конец текущей строки; w - на слово вправо; b - на слово влево; W - до пробела вправо; B - до пробела влево; > - абзац вниз; < - абзац вверх; gg - перейти в начало файла; G - перейти в конец файла; G - перейти на конкретную строку ; / - перейти к ; ? - то же самое, но искать назад; n - повторить поиск; N - повторить поиск назад; [[ - в начало функции; '' - к месту выполнения команды [[
Ввод текста
Следующие команды переводят редактор в режим ввода:
i — перейти в режим ввода с текущей позиции a — перейти в режим ввода после курсора I — переместиться в начало строки и перейти в режим ввода А — переместиться в конец строки и перейти в режим ввода o — перейти в режим ввода с новой строки под курсором O — перейти в режим ввода с новой строки над курсором s - заменяет указанное количество символов (удаляет указанное число символов и переходит в режим ввода). В отличии от команды с которая может удалить кусок текста размером не меньше слова (cw), командой s можно удалить любое число символов. Например 4s удалит четыре символа начиная с того который находится под курсором. Эта команда применяется для замены одного или нескольких символов другими символами. S - удаляет всю текущую строку и переходит в режим ввода. Число перед командой показывает сколько нужно удалить строк начиная с текущей. Например 4S удалит четыре строки включая текущую. R — перейти в режим ввода с заменой текста (аналог insert). Символы под курсором заменяются на вводимые. Команда применяется когда неизвестно сколько придётся изменить символов на другие (иначе можно было бы использовать команду s с указанием числа заменяемых символов, например, 7s). При удалении вводимых символов возвращаются те которые были до ввода команды. Такой режим сохраняется до конца строки. При вводе новой строки (по нажатию Enter), происходит не переход на другую строку с тем же режимом замены текста, а создание новой строки. r — заменить один символ. Заменяет символ находящийся под курсором на символ который следует за командой. При этом не происходит выхода из командного режима (не надо нажимать ESC после изменения текста). Например, команда ry - символ под курсором меняется на "y". Числовой показатель указывает сколько символов необходимо заменить на данный. Например, 3ry вставляет три символа "y".
Удаление и вставка
Ниже перечислены основные комманды удаления и вставки текста:
x — удалить символ под курсором (x удаляет указанное число символов начиная с того который находится под курсором); X — удалить символ влево (удалить символ перед курсором); d — используется совместно с командами перемещения. Удаляет символы с текущего положения курсора до положения после ввода команды перемещения. Пример: dw - удаляет символы с текущего до конца слова. включая пробел после слова, чтобы удалить символы до конца слова, но оставить пробел используется команда de, dE - удаляет символы с текущего до конца слова, включая символы пунктуации, но оставляет пробел после слова, diw - удаляет слово под курсором, dd — удалить текущую строку (вырезать); dd или dd — стирание числа строк начиная с текущей; db - удаляет символы с текущего до начала слова (удаление в обратном направлении); d0 - удаление символов с начала строки до текущего положения курсора; d$ или D - удаление символов с текущего положения курсора до конца строки; с — команда аналогичная d, но после удаление переходит в режим ввода; сс - команда удаляет текущую строку и переходит в режим ввода; C - удаляет текст с текущего положения курсора до конца строки, аналогична команде с$ (где $ - символ конца строки); yy (также Y) — копирование текущей строки в буфер; yy — копирование числа строк начиная с текущей в буфер; p — вставка содержимого буфера под курсором. Поскольку в vim девять ячеек буфера удаления. Можно вставить не только последнее удаление, но и удаления сделанные ранее. Например "4p" вставит под курсор содержимое четвертого удаления начиная с последнего. Также чтобы поменять местами два символа можно использовать комбинацию команд "удалить" -x (удаление в буфер) и "вставить" - p (вставить из буфера). Таким образом, поставив курсор на первую букву из двух которые необходимо поменять местами и нажав комбинацию клавиш xp мы совершим необходимые действия; P — вставка содержимого буфера перед курсором; J — слияние текущей строки со следующей. Числовой аргумент перед командой показывает сколько следующих линий необходимо объединить с текущей. Например 2J объединить две следующие строки с текущей, на которой расположен курсор.
Отмена изменений
u — отмена последней команды; U — отмена всех последних изменений в строке, если строка удалена, то применить эту команду к данной строке будет невозможно.
Поиск
Перейти на строку:
/фраза - поиск фразы во всем документе. n - следующее найденное (вниз) N - предыдущее (вверх).
Выход
Есть еще пара команд, которые вам необходимо знать:
:q! - выйти без сохранения; :wq - записать файл и выйти; ZZ - записать файл и выйти (Если файл не изменяли, то записываться он не будет)
В этой статье описаны основные возможности, необходимые для работы. Практически во все дистрибутивы Linux входит учебник по работе с редактором, - просто введите в командной строке команду vimtutor.
Справка
Для вызова справки (помощи) о редакторе введите в терминале команду:
man vim
vim. как выделить слово и перемещаться на следующее одинаковое слово выделяя его тоже а позже заменить все разом?
stackoverflow мой дорогой) Как сделать сею команду? у меня выделяя слово курсор перемещаясь на другое слово тянет выделение по строкам вслед за собой выделяя все на пути. А вроде одну команду нашел, но она просто выделяет как бы маркером их, но ничего не делает с ними, будто просто показывает одинаковые слова но без возможности последующего форматирования
Отслеживать
задан 21 окт 2020 в 9:57
307 2 2 серебряных знака 10 10 бронзовых знаков
А что за команды, как вызываете? очень сложно угадать по таким описаниям.
21 окт 2020 в 10:47
vim. в нем пытаюсь найти такую команду. к примеру звездочка не помогает - просто перемещается к похожему, мне нужно выделение с последующим форматированием одинаковых слов или '/' тоже самое, обычное веделение vaw или viw выделяют но как дальше переместиться к одинаковому слову без выделение всего что попадет между ними не знаю
21 окт 2020 в 11:05
а что такое "последующее форматирование"? возможно, Вы просто не знаете о команде точка . , которая повторяет последнюю команду редактирование. И в этом случае / + n / N + . сделают все что нужно
21 окт 2020 в 12:01
снял специально для вас гифку, посмотрите если не сложно пожалуйста. Только мне нужно как это сделать при помощи vim. На данной гифке урок с интернета
21 окт 2020 в 13:01
похоже этот плагин как раз делает то, что нужно. github.com/mg979/vim-visual-multi Если это можно выделить столбиком, то можно через блочный режим. Я же обычно пользуюсь точкой.
21 окт 2020 в 13:14
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Похоже этот плагин как раз делает то, что нужно - mg979/vim-visual-multi
Если это можно выделить столбиком, то можно через блочный режим. Вначале через Ctrl + v переходим в режим блочного выделения, потом стрелками вниз-вверх выделяем столбик и переходим через Shift + i в редактирование. Редактируем обычным способом (будет редактироваться только одна строка). После нажатия Esc все остальные строки отредактируются теми же командами. Ключевой момент, что они отредактируются "теми же командами", поэтому, если это команда, которая меняет по контексту, то оно и будет так.
Я же обычно пользуюсь точкой. Точка повторяет последнюю команду редактирования, даже если она очень и очень сложная.
Допустим, нужно все слова test заменить на data кроме комментариев. Пишем / t e s t enter , видим выделенный текст. жмем i или любую другую команду редактирования и правим как надо (в нашем случае лучше наверно c i w и ввести новый текст). После этого жмем Esc А теперь, главное аккуратно - n - переходим к следующему найденному тексту и если он "правильный", жмем . .
Как только это осваивается, другие редакторы просто отдыхают. Ведь / умеет искать регулярками.
- ещё почитать о точке - https://dev.to/iggredible/vim-use-dot-command-to-save-keystrokes-1c96
- почитать о других плагинах и возможностях - https://stackoverflow.com/questions/11784408/vim-multiline-editing-like-in-sublimetext