Как переименовать файл в vim

Обновлено: 07.07.2024

Vim - это один из самых популярных текстовых редакторов среди гиков и программистов. Он имеет особый интерфейс управления, с помощью которого вы можете очень быстро набирать и модифицировать текст не отрывая пальцев от клавиатуры. Редактор достаточно сложен в обучении, но если его освоить, то работать с текстом будет намного легче.

Мы уже обсуждали редактор Vim в статье как пользоваться vim. Но там были рассмотрены только более общие моменты работы с редактором. В сегодняшней статье мы остановимся на командном режиме, а именно, на командах, которые можно вводить с помощью двоеточия. Именно с помощью таких команд будет выполняться большинство действий с файлами. Существуют команды редактора Vim для решения различных задач, сегодня мы рассмотрим большую часть из них.

Что такое команды Vim

Вообще, команды Vim linux - это все сочетания клавиш, которые нажимаются в командном режиме. Но мы уже обсудили их как можно подробнее в предыдущей статье, поэтому в этой остановимся только на специализированных командах расширенного режима, их параметрах и переменных. Это тоже обширная тема.

Чтобы активировать расширенный режим редактора (Ex), его нужно запустить с опцией -e. Или для выполнения одной команды нужно ввести двоеточие. Синтаксис команд расширенного режима такой:

[адрес] [команда] [!] [параметры]

Все части команды необязательны, в определенной команде может использоваться только одна или несколько из них. Чтобы перечислить несколько команд подряд используйте символ "|". А теперь рассмотрим детальнее что означает каждый из этих пунктов:

  • Адрес - указывает набор данных, над которыми будет выполнять операции команда. Можно указать адрес начала и конца фрагмента, адресовать только внутри строки и многое другое;
  • Команда - сама команда, которая сообщает программе что ей нужно сделать;
  • ! - в некоторых командах список аргументов отделен восклицательным знаком;
  • Параметры - команда может принимать различные параметры, чтобы определить что нужно делать с теми или иными данными, например, файл, флаги, регулярные выражения и так далее.

Это все довольно сложно, поэтому хватит теории и перейдем сразу к практике, где все сразу станет на свои места.

Команды редактора Vim

А теперь давайте рассмотрим команды vi в расширенном режиме. Все команды отсортированы в алфавитном режиме.

abbreviate

:abbreviate - команда позволяет создавать аббревиатуры. Это очень удобно. Вы набираете сокращенное слово, а затем программа автоматически заменяет его на полный вариант.

ab без параметров показывает все созданные аббревиатуры:

Создадим аббревиатуру, которая будет заменять tst на test:


Дальше просто вводите текст в режиме редактирования.

append

Позволяет перейти в режим редактирования, аналогично клавише a. Просто наберите команду и продолжайте набирать текст:

Также можно добавить знак восклицания, он заставит команду начать вставку с новой строки:

Перед командной можно указать адрес строки, после которой нужно начать добавлять текст, например, после первой:


Позволяет отобразить список файлов, которые сейчас редактируются:

buffers

Отображает список активных буферов (открытых файлов):

buffer

Переключает в указанный буфер, например, чтобы переключиться в первый буфер выполните:

Если текущий буфер не сохранен, для перехода нужно добавить восклицательный знак.

Команда cd позволяет изменить текущий каталог программы. В параметрах ей нужно передать путь:


Если файл не сохранен, команда не будет выполнена, чтобы это обойти используйте восклицательный знак.

Команда позволяет скопировать диапазон строк. Ей нужно передать адрес строк, которые нужно скопировать и адрес для вставки. Если адрес для вставки не передать, то строки будут вставлены в начало файла. Синтаксис:

[адрес] copy адрес_вставки

Например, скопируем первых четыре строки, нумерация начинается с нуля, и вставим их после четвертой:


Чтобы указать адрес диапазона используйте запятую.

Открывает новый файл для редактирования. Старый файл не закрывается, а для нового открывается новый буфер, который сразу выводится на экран. Команде можно передать номер строки, с которой нужно начать, и имя файла. Имя может быть задано в виде регулярного выражения.

:edit file
:buffers

Команда позволяет переименовать файл. Если файл уже существует, то необходимо добавить восклицательный знак.


global

Команда global позволяет выполнять поиск по регулярному выражению в документе. Ей можно передать диапазон строк, в которых нужно искать. Синтаксис:

:[адрес] global /выражение/ параметры

Например, такая команда выведет все вхождения слова Vim во всем документе:

А эта только в первых пяти строчках:


Команда позволяет объединить несколько строк. Команде нужно передать адрес и количество строк, которые нужно объединить. Перевод строки будет заменен пробелом.



Команда похожа на ab, но вместо аббревиатур создает макросы. Когда вы набираете указанное сочетания выполняется команда или действие. Если указан восклицательный знак - применяется в режиме вставки, иначе - в командном.

Например, создадим макрос для отображения номеров строк:

:map sn :set number<Enter>

После этого достаточно набрать sn.

Эта команда позволяет создавать метки в тексте, чтобы потом иметь возможность к ним быстро перейти нажатием нескольких клавиш. Метка создается для текущей строки и позиции курсора. В качестве имени метки используется строчная или заглавная буква. Строчная создает метку для текущего буфера, а заглавная для всех открытых вкладок.


Также можно указать адрес строки, для которой вы хотите создать метку. Затем, чтобы перейти к метке, просто наберите в командном режиме:

Команда позволяет переместить часть текста по указанному адресу. Если адрес не указать, то текст перемещается в начало. Например, переместим строки 4, 5 и 6 в начало:


Перейти к редактированию следующего файла в списке аргументов:

number

Позволяет отобразить нужное количество строк, начиная с текущей, вместе с их номерами:


Вставка скопированного или удаленного участка текста в буфер. Если буфер не указан, то будет использован, недавно измененный.

Считывает содержимое файла и вставляет его в текущий файл после заданной строки. Если перед именем файла указать восклицательный знак, он будет выполнен как системная команда, а вывод будет записан в качестве содержимого.


rewind

Сбрасывает указатель списка аргументов на начало и открывает для редактирования первый файл.

Это одна из самых часто используемых команд. Она позволяет установить значение переменных, которые во многом определяют поведение редактора. Если параметров не задать, то будут выведены все существующие переменные. Синтаксис команды:

:set имя_переменной = значение

Чтобы получить все возможные переменные наберите:


Например, сообщаем редактору, что нужно показывать номера строк:


Или отключаем показ номеров строк:


shell

Эта команда позволяет получить доступ к командной оболочке системы, например, bash, прямо из редактора.

source

Выполняет команды редактора из указанного файла. В файле могут быть записаны различные команды расширенного режима, в том числе и команда source.

substitute

Это команда для поиска строки по всему документу или в заданном диапазоне и замены ее на нужную. Вот ее синтаксис:

:[адрес] s /шаблон_поиска/на_что_заменить/ опции

По умолчанию будет заменено только первое вхождение.


Чтобы заменить все найденные нужно добавить опцию g:

Можно использовать не только обычный текст, но и регулярные выражения. Опция i, сообщает утилите что нужно не учитывать регистр.

unabbreviate

Удаляет все ранее созданные сокращения с помощью команды ab. Например, удалим аббревиатуру tst:

Отменяет последнее изменение или несколько изменений. Нельзя только отменять команду edit и системные команды.

unmap

Удаляет созданный ранее макрос или все макросы.

write

Эта команда используется для сохранения изменений. Если у файла еще нет имени, его нужно задать в этой команде. Если перед именем файла указать !, то будет вызвана системная команда, а данные переданы ей на ввод. Чтобы сохранить файл, доступный только для чтения нужно добавить восклицательный знак после команды.


Аналогично команде write, только после записи завершает сеанс работы с редактором.

Закрывает редактор, если изменения не были сохранены, а редактор нужно закрыть, то добавьте восклицательный знак:

Выводы

Это были все самые важные команды редактора Vim в расширенном режиме которые вы можете использовать для решения своих задач. Многие из них достаточно сложны, но если разобраться то все это может быть очень полезным и намного ускорить вашу работу с редактором. Надеюсь, эта информация была полезной для вас.

На завершение видео со сравнением Emacs, Vim и IDE:

Есть маленький плагин , который позволяет вам сделать это.

Обратите внимание, что он не удаляет старый файл из списка буферов. Если это важно для вас, вы можете использовать следующее:

Этот маленький сценарий не идеален (дополнительный возврат каретки, который вы должны нажать), но он выполняет свою работу.

Другой способ - просто использовать netrw, который является частью vim.

Затем есть варианты для удаления, переименования и т. Д.

Вот таблица ключей для открытия netrw в папку файла, который вы редактируете:

Я не знаю, является ли это «самым простым» методом, но при условии, что вы уже сохранили свой файл (: w), я бы вызвал оболочку (: sh) и сделал бы простой cp foo foo.bak To go вернуться в редактор используйте Ctrl-D / Exit. Полезный список команд редактора vi по этой ссылке

Вы также можете использовать: f, а затем: w

Регистр % содержит имя текущего файла. '%:h' показывает каталог «head», содержащий текущий файл, например: %:h возвращает /abc/def , когда полный путь к файлу равен abc/dev/my.txt

Существует значительно больший плагин под названием vim-eunuch Тима Поупа, который включает функцию переименования, а также некоторые другие полезности (удаление, поиск, сохранение всего, chmod, редактирование sudo, . ).

Чтобы переименовать файл в vim-eunuch:

По сравнению с rename.vim:

Сохраняет несколько нажатий клавиш:)

В Vim есть функция rename , но, к сожалению, она не сохраняет историю.

Самый простой способ переименовать файл без потери истории, не зависящий от ОС:

Или создайте плагин

Если вы хотите использовать быструю команду для переименования файла, добавьте новый файл в

/ .vim / plugin со следующим содержимым:

Команда Rename поможет вам быстро переименовать файл.

Как насчет этого (улучшено предложением Джейка):

Вы также можете сделать это, используя netrw

Команда explore открывает netrw в каталоге открытого файла

Наведите курсор на файл, который вы хотите переименовать:

Введите новое имя, нажмите ввод, нажмите y.

Короткий, безопасный, без плагина:

Обучающие

. или попробуйте самостоятельно создать функцию / команду / скрипт. Начните с простого, например:

после перезагрузки vimrc, просто наберите :Rename new_filename . В чем проблема с этой командой?

Тест безопасности 1: Что означает :Rename без аргумента?

Решение: вы можете использовать, например. условия или try выражение, подобное этому:

Тест безопасности 1: :Rename (без аргумента) выдаст ошибку:

Тест безопасности 2: Что если имя будет таким же, как и у предыдущего?

Тест безопасности 3: Что, если файл будет в другом месте, чем вы на самом деле?

Исправьте это самостоятельно. Для удобства чтения вы можете написать это следующим образом:

!rm , как правило, не очень безопасны . mv лучше места для мусора

try | code1 | code2 | tryend -> при ошибке происходит, когда code1, не запускает code2

:sav (или :saveas ) эквивалентно :f new_name | w - см. file_f - и сохраняет историю отмен

Есть маленький плагин , который позволяет вам сделать это.

Команда называется :saveas , но, к сожалению, она не удалит ваш старый файл, вам придется делать это вручную. смотрите :help saveas для получения дополнительной информации.

EDIT:

Большинство установок vim имеют встроенный файловый проводник, который вы можете использовать для таких операций. Попробуйте :Explore в командном режиме (на самом деле я бы сопоставил это с функциональной клавишей, это очень удобно). Например, вы можете переименовать файлы с помощью R или удалить их с помощью D . Но нажатие <F1> в проводнике даст вам лучший обзор.

Если вы используете git и уже имеете плагин tpope fugitive.vim , тогда просто:

  1. Переименуйте ваш файл на диске.
  2. Переименуйте файл в git repo.
  3. Перезагрузите файл в текущий буфер.
  4. Сохранить историю отмен.

Если ваш файл еще не был добавлен в репозиторий git, то сначала добавьте его:

В Windows необязательный третий шаг немного меняется:

  • (Опционально) удалить старую копию Windows - :!del oldname .

Я делаю это с плагином NERDTree:

затем нажмите m

Для переименования вы можете выбрать (m)ove the current node и изменить имя файла. Также есть такие опции, как удаление, копирование, перемещение и т.д.

если файл уже сохранен:

Пример:

Требования к разрешениям:

Сохранить как:

для Windows Непроверено

Я бы порекомендовал :Rename от tpope's eunuch для этого.

Он также включает в себя множество других удобных команд.

Команда Rename в настоящее время определяется следующим образом (проверьте репо на наличие обновлений!):

Коротко, безопасно, без плагина:

Образования

. или попробуйте создать функцию/команду/скрипт самостоятельно. Начните с простого, как:

после перезагрузки vimrc просто введите :Rename new_filename . В чем проблема с этой командой?

Тест безопасности 1: Что значит :Rename без аргумента?

Решение: вы можете использовать, например. условия или try оператор как это:

Тест безопасности 1: :Rename (без аргумента) выдаст ошибку:

Тест безопасности 2: Что если имя будет таким же, как и предыдущее?

Тест безопасности 3: Что, если файл будет находиться в другом месте, чем вы на самом деле?

Исправь это сам. Для удобства чтения вы можете написать это следующим образом:

!rm , как правило, не очень безопасен . mv лучше поместить в корзину

try | code1 | code2 | tryend -> когда происходит ошибка во время code1, не запускайте code2

:sav (или :saveas ) эквивалентен :f new_name | w - см. file_f - и сохраняет историю отмен

Команда называется :saveas , но, к сожалению, она не удалит старый файл, вам придется сделать это вручную. см. :help saveas для получения дополнительной информации.

EDIT:

В большинстве установок vim есть встроенный файловый проводник, который вы можете использовать для таких операций. Попробуйте :Explore в командном режиме (я бы на самом деле сопоставлял это с функциональным ключом, это очень удобно). Вы можете переименовать файлы с помощью R или удалить их с помощью D , например. Но нажатие <F1> в проводнике даст вам лучший обзор.

ответил(а) 2009-07-30T12:08:00+04:00 12 лет, 3 месяца назад

Если вы используете git и уже имеете плагин tpope fugitive.vim, просто:

    Переименуйте файл на диск.
    Переименуйте файл в git repo.
    Перезагрузите файл в текущий буфер.
    Сохранять историю отмены.

Если ваш файл еще не был добавлен в репозиторий git, а затем добавьте его:

ответил(а) 2012-11-21T23:45:00+04:00 8 лет, 12 месяцев назад

Там маленький плагин, который позволяет вам это делать.

ответил(а) 2009-07-30T11:51:00+04:00 12 лет, 3 месяца назад

В Windows дополнительный 3-й шаг немного изменится:

    (необязательно) удалите старую копию Windows - :!del oldname .
ответил(а) 2009-07-30T13:06:00+04:00 12 лет, 3 месяца назад

Я делаю это с плагином NERDTree:

затем нажмите m

Затем вы можете выбирать между удалением, копированием, перемещением и т.д.

Я бы рекомендовал :Rename от tpope eunuch для этого.

Он также включает в себя множество других удобных команд.

Команда Rename определена в следующем порядке (проверьте репо для любых обновлений!):

ответил(а) 2012-04-28T12:15:00+04:00 9 лет, 6 месяцев назад

Вы также можете сделать это, используя netrw

Команда "Поиск" открывает netrw в каталоге открытого файла

Переместите курсор над файлом, который вы хотите переименовать:

Введите новое имя, нажмите enter, нажмите y.

ответил(а) 2015-01-15T15:04:00+03:00 6 лет, 10 месяцев назад ответил(а) 2009-07-30T16:49:00+04:00 12 лет, 3 месяца назад

Это функция в Gary Bernhardts.vimrc, которая обрабатывает это.

ответил(а) 2013-12-30T12:15:00+04:00 7 лет, 10 месяцев назад

Как насчет этого (улучшено предложением Джейка):

ответил(а) 2011-12-19T00:12:00+04:00 9 лет, 11 месяцев назад

Короткий, безопасный, без плагина:

Образование

. или попробуйте создать функцию/команду/ script самостоятельно. Начните с простого просто:

после перезагрузки vimrc просто введите :Rename new_filename .
В чем проблема с этой командой?

Тест безопасности 1: что :Rename без аргумента?

Решение: вы можете использовать, например. условия или выражение try :

Тест безопасности 1:
:Rename (без аргумента) выдает ошибку:

Тест безопасности 2:
Что, если имя будет таким же, как и предыдущее?

Тест безопасности 3:
Что делать, если файл будет находиться в другом месте, чем ваш фактический?

Исправьте это сами.
Для удобства чтения вы можете написать его следующим образом:

!rm , как правило, не очень безопасен. mv лучше места для мусора

try | code1 | code2 | tryend → когда возникает ошибка во время кода1, не запускайте код2

:saveas эквивалентен :f new_name | w - см. file_f

Читайте также: