2

Время от времени я хочу переименовать файл во время редактирования. Например, из .html в .xhtml или около того.

Чтобы сделать это в Vim, я должен сделать

:saveas new_file
:!rm old_file

Есть ли встроенная команда, которая позволяет мне избавиться от :!rm ? Раздражает повторный ввод старого пути и имени файла.

5 ответов5

8

Нет, нет команды, которая будет одновременно переименовывать файл на диске и в буфер. Однако есть несколько способов уменьшить количество набираемого текста. Например, Vim расширит% до имени текущего буфера / файла, так что вы можете использовать

:!mv % new_file

Если new_file имеет то же корневое имя, что и old_file, вы можете сделать это, чтобы изменить только расширение:

:!mv % %:r.xhtml

где %:r расширяется до имени текущего буфера / файла без расширения. Увидеть

:help filename-modifiers

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

:e new_file

или же

:f new_file

Обе команды имеют завершение имени файла, поэтому вы можете ввести только первые несколько букв имени файла, а затем <tab>, чтобы Vim заполнил имя.

3

Вы всегда можете определить свой собственный. Например, поместите это в свой .vimrc:

" First define a function
function! MoveFunction(newname)
    " get the current file name
    let a:oldname = expand("%:p")
    " save under the new name
    exec "saveas " . a:newname 
    " delete the old file
    call delete(a:oldname) 
endfunction
" Next define a command
command! -nargs=1 MoveTo call MoveFunction(<f-args>)

затем:

:MoveTo <new-name>

должен делать то, что вы хотите.

1

Также есть плагин Rename.vim: http://www.vim.org/scripts/script.php?script_id=1928

1

Вы можете просто использовать

:!mv old_file new_file

Вы должны сначала сохранить текущий буфер, кстати!

0

(сейчас?) Существует также функция rename() , но тогда вам придется отслеживать любой буфер, указывающий на старое имя файла, чтобы применить :filename .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .