Pergunta
Como devo mudar o nome de meu arquivo corrente no vim?
Por exemplo:
- I am edição
person.html_erb_spec.rb
- Eu gostaria que ele renomeado para
person.haml_spec.rb
- Eu gostaria de continuar a editar
person.haml_spec.rb
Como eu iria sobre como fazer isso, elegantemente?
Solução
Há uma href="http://www.vim.org/scripts/script.php?script_id=1928" rel="noreferrer"> pouco que vamos fazer isso.
Outras dicas
O comando é chamado :saveas
, mas, infelizmente, não vai apagar o arquivo de idade, você vai ter que fazer isso manualmente. consulte :help saveas
para mais informações.
EDIT:
A maioria das instalações vim tem um explorador de arquivos integrado, que você pode usar para tais operações. Tente :Explore
no modo de comando (eu realmente mapear isso para uma tecla de função, é muito calhar). Você pode renomear arquivos com R
ou excluí-los com D
, por exemplo. Mas pressionando <F1>
no explorador lhe dará uma visão melhor.
Se você usar git e já tem o plug-in tpope fugitive.vim então simplesmente:
:Gmove newname
Esta vontade:
- Renomeie o arquivo no disco.
- Renomeie o arquivo no repositório git.
- Recarregar o arquivo para o buffer atual.
- Preserve desfazer história.
Se o arquivo ainda não foi adicionado em um repositório git então primeiro adicioná-lo:
:Gwrite
- Escrever o arquivo durante a edição -
:w newname
-. Para criar uma cópia - começar a editar a nova cópia -.
:e#
- (opcionalmente) remover a cópia antiga -.
:!rm oldname
No Windows, o passo 3ª opcional muda um pouco:
- (opcionalmente) remover copiar antigos Windows -.
:!del oldname
Estou fazendo isso com NERDTree plugin:
:NERDTreeFind
pressione então m
Para mudar o nome você pode escolher (m)ove the current node
e mudança de nome de arquivo. Também há opções como apagar, copiar, mover, etc ...
Se o arquivo já está salvo:
:!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
permissões Requisitos:
:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
Salvar como:
:!mv {file location} {save_as file location}
:w
:e {save_as file location}
Para o Windows Não verificado
:!move {file location} {new file location}
:e {new file location}
Eu recomendo :Rename
de tpope eunuco para isso.
Ele também inclui um monte de outros comandos úteis.
O comando Rename é definida da seguinte nele atualmente (verificar o repo para quaisquer atualizações!):
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
Curto, garantir, sem plugin:
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
controle + R , # irá expandir instantaneamente a um alternate-arquivo (caminho editada anteriormente na janela atual) antes de pressionar Enter . Que nos permite rever o que exatamente vamos excluir.
Usando |
tubulação em tal caso é não garantir, porque se sav
falhar por qualquer motivo, #
ainda irá apontar para outro lugar (ou nada). Isso significa !rm #
ou delete(expand(#))
pode excluir o arquivo completamente diferente!
Assim fazê-lo à mão com cuidado ou utilização bom roteiro (eles são mencionados em muitas respostas aqui).
Educational
... ou construção try uma função / comando / script si mesmo. Iniciar a partir de simples sth como:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
após recarga vimrc, basta digitar :Rename new_filename
.
Qual é o problema com esse comando?
Teste de segurança 1:? O que does:Rename
sem argumento
Sim, ele exclui arquivo oculto em '#'!
Solução: você pode usar por exemplo. condições ou try
declaração como essa:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Teste de segurança 1:
:Rename
(sem argumento) irá lançar um erro:
E471: Argumento necessário
Teste de segurança 2: E se o nome será o mesmo como anterior?
Teste de segurança 3: E se o arquivo estará em local diferente do que o seu real?
Fix it yourself. Para facilitar a leitura, você pode escrevê-lo desta maneira:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
notas
-
!rm #
é melhor do que!rm old_name
-> Você não precisa lembrar o nome antigo -
!rm <C-R>#
é melhor do que!rm #
quando fazê-lo com a mão -> você vai ver o que você realmente remover (razões de segurança) -
!rm
geralmente não é muito seguro ...mv
para um local de lixo é melhor -
call delete(expand('#'))
é melhor do que o comando shell (OS agnóstico), mas mais tempo para escrever e impossível usar controle + R -
try | code1 | code2 | tryend
-> quando o erro ocorre enquanto code1, não corra code2 -
:sav
(ou:saveas
) é equivalente a:f new_name | w
- veja file_f - e preserva desfazer a história -
expand('%:p')
dá caminho inteiro de sua localização (%
) ou localização do arquivo alternativo (#
)
Você também pode fazê-lo usando netrw
O comando explorar abre netrw no diretório do arquivo aberto
:E
Mova o cursor sobre o arquivo que você deseja renomear:
R
Digite o novo nome, pressione enter, pressione y.
sav person.haml_spec.rb | call delete(expand('#'))
Há uma função em de Gary Bernhardt Vimrc que lida com isso.
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>
Como sobre este (melhorada por sugestão de Jake):
:exe "!mv % newfilename" | e newfilename
Vim tem uma função rename
, mas, infelizmente, não retém a história.
A maneira mais fácil OS agnóstico para renomear um arquivo sem perder a história seria:
:saveas new_file_name
:call delete(expand('#:p'))
expand('#:p')
retorna o caminho completo do arquivo mais antigo.
Use :bd #
se você também deseja excluir o arquivo mais antigo da lista buffer.
Ou criar um plugin
Se você quiser usar um comando rápido para mudar o nome do arquivo, adicionar um novo arquivo em ~ / .vim / plugin com o seguinte conteúdo:
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>)
O Rename
comando irá ajudá-lo a rapidamente renomear um arquivo.
Há um plugin sightly maior chamado vim-eunuco por Tim Pope, que inclui uma função de renomeação como bem como algumas outras guloseimas (apague, ache, senão todos, chmod, sudo edição, ...).
Para renomear um arquivo no vim-eunuco:
:Move filename.ext
Em comparação com rename.vim:
:rename[!] filename.ext
Salva algumas teclas:)
Você também pode usar: f seguido por: w
Eu não sei se este é o método "fácil", mas supondo que você já salvou o arquivo (: w) Gostaria de invocar o shell (: sh) e fazer um simples foo.bak cp foo Para ir voltar para uso editor Ctrl-D / Sair. lista útil de vi editor comandos neste link
:!mv % %:h/new_name
Register %
contém o nome dos file.'%:h'
shows atuais do diretório 'cabeça' que contém o arquivo atual, por exemplo .: %:h
returns /abc/def
quando o arquivo caminho completo é abc/dev/my.txt
Este pequeno script não é perfeito (o transporte de retorno extra que você tem a imprensa), mas ele começa o trabalho feito.
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>
Outra maneira é netrw uso justo, que é uma parte natural de vim.
:e path/to/whatever/folder/
Depois, há opções para excluir, renomear, etc.
Aqui está um mapa de teclado para netrw aberta para a pasta do arquivo que você está editando:
map <leader>e :e <C-R>=expand("%:p:h") . '/'<CR><CR>
:sav newfile | !rm #
Note que ele não remover o arquivo antigo da lista de buffer. Se isso é importante para você, você pode usar o seguinte em vez disso:
:sav newfile | bd# | !rm #