Есть маленький плагин , который позволяет вам сделать это.
:sav newfile | !rm #
Обратите внимание, что он не удаляет старый файл из списка буферов. Если это важно для вас, вы можете использовать следующее:
:sav newfile | bd# | !rm #
Этот маленький сценарий не идеален (дополнительный возврат каретки, который вы должны нажать), но он выполняет свою работу.
function Rename()
let new_file_name = input('New filename: ')
let full_path_current_file = expand("%:p")
let new_full_path = expand("%:p:h")."/".new_file_name
bd
execute "!mv ".full_path_current_file." ".new_full_path
execute "e ".new_full_path
endfunction
command! Rename :call Rename()
nmap RN :Rename<CR>
Другой способ - просто использовать netrw, который является частью vim.
:e path/to/whatever/folder/
Затем есть варианты для удаления, переименования и т. Д.
Вот таблица ключей для открытия netrw в папку файла, который вы редактируете:
map <leader>e :e <C-R>=expand("%:p:h") . '/'<CR><CR>
Я не знаю, является ли это «самым простым» методом, но при условии, что вы уже сохранили свой файл (: w), я бы вызвал оболочку (: sh) и сделал бы простой cp foo foo.bak To go вернуться в редактор используйте Ctrl-D / Exit. Полезный список команд редактора vi по этой ссылке
:!mv % %:h/new_name
Регистр %
содержит имя текущего файла. '%:h'
показывает каталог «head», содержащий текущий файл, например: %:h
возвращает /abc/def
, когда полный путь к файлу равен abc/dev/my.txt
Существует значительно больший плагин под названием vim-eunuch Тима Поупа, который включает функцию переименования, а также некоторые другие полезности (удаление, поиск, сохранение всего, chmod, редактирование sudo, ...).
Чтобы переименовать файл в vim-eunuch:
:Move filename.ext
По сравнению с rename.vim:
:rename[!] filename.ext
Сохраняет несколько нажатий клавиш:)
В Vim есть функция rename
, но, к сожалению, она не сохраняет историю.
Самый простой способ переименовать файл без потери истории, не зависящий от ОС:
:saveas new_file_name
:call delete(expand('#:p'))
expand('#:p')
возвращает полный путь к старому файлу.
Используйте :bd #
, если вы также хотите удалить более старый файл из списка буферов.
Если вы хотите использовать быструю команду для переименования файла, добавьте новый файл в ~ / .vim / plugin со следующим содержимым:
function! s:rename_file(new_file_path)
execute 'saveas ' . a:new_file_path
call delete(expand('#:p'))
bd #
endfunction
command! -nargs=1 -complete=file Rename call <SID>rename_file(<f-args>)
Команда Rename
поможет вам быстро переименовать файл.
Как насчет этого (улучшено предложением Джейка):
:exe "!mv % newfilename" | e newfilename
sav person.haml_spec.rb | call delete(expand('#'))
Вы также можете сделать это, используя netrw
Команда explore открывает netrw в каталоге открытого файла
:E
Наведите курсор на файл, который вы хотите переименовать:
R
Введите новое имя, нажмите ввод, нажмите y.
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control kbd> + R kbd>, # kbd> мгновенно расширится до альтернативный файл (ранее отредактированный путь в текущем окне) перед нажатием Enter kbd>. Это позволяет нам проверить, что именно мы собираемся удалить. Использование канала |
в таком случае не небезопасно, потому что если sav
не удастся по какой-либо причине, #
все равно будет указывать на другое место (или на ничто). Это означает, что !rm #
или delete(expand(#))
могут удалить совершенно другой файл! Поэтому делайте это вручную или используйте хороший сценарий (они упоминаются здесь во многих ответах).
... или попробуйте самостоятельно создать функцию / команду / скрипт. Начните с простого, например:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
после перезагрузки vimrc, просто наберите :Rename new_filename
. В чем проблема с этой командой?
Тест безопасности 1: Что означает :Rename
без аргумента?
Да, он удаляет файл, скрытый в '# '!
Решение: вы можете использовать, например. условия или try
выражение, подобное этому:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Тест безопасности 1: :Rename
(без аргумента) выдаст ошибку:
E471 : Требуется аргумент
Тест безопасности 2: Что если имя будет таким же, как и у предыдущего?
Тест безопасности 3: Что, если файл будет в другом месте, чем вы на самом деле?
Исправьте это самостоятельно. Для удобства чтения вы можете написать это следующим образом:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
отмечает
!rm #
лучше, чем !rm old_name
-> вам не нужно помнить старое имя [1157] !rm <C-R>#
лучше, чем !rm #
, когда вы делаете это вручную -> вы увидите, что вы фактически удаляете (причина безопасности)
!rm
, как правило, не очень безопасны ... mv
лучше места для мусора
call delete(expand('#'))
лучше, чем команда оболочки (независимая от ОС), но длиннее для ввода и невозможно использовать control kbd> + R kbd>
try | code1 | code2 | tryend
-> при ошибке происходит, когда code1, не запускает code2
:sav
(или :saveas
) эквивалентно :f new_name | w
- см. file_f - и сохраняет историю отмен
expand('%:p')
дает полный путь вашего местоположения (%
) или местоположения альтернативного файла (#
)
Я бы порекомендовал :Rename
из евнуха Тпопе для этого.
Он также включает в себя множество других полезных команд.
Команда переименования в настоящее время определяется следующим образом (проверьте репо на наличие обновлений!):
command! -bar -nargs=1 -bang -complete=file Rename :
\ let s:file = expand('%:p') |
\ setlocal modified |
\ keepalt saveas<bang> <args> |
\ if s:file !=# expand('%:p') |
\ call delete(s:file) |
\ endif |
\ unlet s:file
Если файл уже сохранен:
:!mv {file location} {new file location}
:e {new file location}
Пример:
:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala
Требования к разрешениям:
:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
Сохранить как:
:!mv {file location} {save_as file location}
:w
:e {save_as file location}
Для Windows Непроверено
:!move {file location} {new file location}
:e {new file location}
Я делаю это с плагином NERDTree:
:NERDTreeFind
, затем нажмите m kbd>
. Чтобы переименовать, вы можете выбрать (m)ove the current node
и изменить имя файла. Также есть такие опции, как удаление, копирование, перемещение и т. Д.
:w newname
- чтобы создать копию. :e#
. :!rm oldname
. В Windows необязательный третий шаг немного меняется:
:!del oldname
. Если вы используете git и у вас уже есть плагин tpope fugitive.vim , то просто:
:Gmove newname
Это будет:
Если ваш файл еще не был добавлен в репозиторий git, то сначала добавьте его:
:Gwrite
Команда называется :saveas
, но, к сожалению, она не удалит ваш старый файл, вам придется делать это вручную. см. :help saveas
для получения дополнительной информации.
РЕДАКТИРОВАТЬ:
Большинство установок vim имеют встроенный файловый менеджер, который вы можете использовать для таких операций. Попробуйте :Explore
в командном режиме (на самом деле я бы сопоставил это с функциональной клавишей, это очень удобно). Например, вы можете переименовать файлы с помощью R
или удалить их с помощью D
. Но нажатие <F1>
в проводнике даст вам лучший обзор.
В есть функция .vimrc Гэри Бернхардта , которая обрабатывает это.
function! RenameFile()
let old_name = expand('%')
let new_name = input('New file name: ', expand('%'), 'file')
if new_name != '' && new_name != old_name
exec ':saveas ' . new_name
exec ':silent !rm ' . old_name
redraw!
endif
endfunction
map <leader>n :call RenameFile()<cr>