Como devo renomear meu arquivo atual no Vim?
Por exemplo:
- Estou editando
person.html_erb_spec.rb
- Eu gostaria que fosse renomeado para
person.haml_spec.rb
- Eu gostaria de continuar editando
person.haml_spec.rb
Como eu faria isso com elegância?
Como devo renomear meu arquivo atual no Vim?
Por exemplo:
person.html_erb_spec.rb
person.haml_spec.rb
person.haml_spec.rb
Como eu faria isso com elegância?
Respostas:
Há um pequeno plugin que permite fazer isso.
Program Files (x86)
. Sempre que esse diretório precisar ser trabalhado, ele deverá ser colocado entre aspas. O que é muito.
O comando é chamado :saveas
, mas infelizmente não excluirá seu arquivo antigo, você precisará fazer isso manualmente. veja :help saveas
para mais informações.
EDITAR:
A maioria das instalações do vim possui um gerenciador de arquivos integrado, que você pode usar para essas operações. Tente :Explore
no modo de comando (eu na verdade mapeia isso para uma tecla de função, é muito útil). Você pode renomear arquivos R
ou excluí-los com D
, por exemplo. Mas pressionar <F1>
o explorer fornecerá uma visão geral melhor.
Se você usa git e já possui o plugin fugitive.vim do tpope, basta:
:Gmove newname
Isso vai:
Se seu arquivo ainda não foi adicionado a um repositório git, adicione-o primeiro:
:Gwrite
:Gmove
requer o caminho relativo para o novo nome do arquivo. Uma boa maneira de fazer isso é digitar o :Gmove <ctrl-r>%
que acrescenta o caminho / nome do arquivo atual.
Estou fazendo isso com o plugin NERDTree:
:NERDTreeFind
então aperte m
Para renomear, você pode escolher (m)ove the current node
e alterar o nome do arquivo. Também existem opções como excluir, copiar, mover, etc ...
:w newname
- para criar uma cópia.:e#
.:!rm oldname
.No Windows, a 3ª etapa opcional muda um pouco:
:!del oldname
.:f newname
2) salvar :w
3) (opcionalmente) !rm oldname
. A vantagem é que seu histórico de desfazer é preservado.
:saveas
é melhor nesse sentido, @rampion - e faz o que @kynan escreveu.
Se o arquivo já estiver salvo:
:!mv {file location} {new file location}
:e {new file location}
Exemplo:
:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala
Requisitos de permissão:
:!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 Windows não verificado
:!move {file location} {new file location}
:e {new file location}
Eu recomendaria :Rename
do eunuco do tpope para isso.
Ele também inclui vários outros comandos úteis.
O comando Renomear está definido da seguinte forma no momento (verifique o repositório para ver se há 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
Você também pode fazer isso usando o netrw
O comando explore abre netrw no diretório do arquivo aberto
:E
Mova o cursor sobre o arquivo que deseja renomear:
R
Digite o novo nome, pressione enter, pressione y.
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control+ R, #será expandido instantaneamente para um arquivo alternativo (caminho editado anteriormente na janela atual) antes de pressionar Enter. Isso nos permite revisar o que exatamente vamos excluir. O uso de canos |
nesse caso não é seguro, porque, se sav
por algum motivo falhar, #
ainda apontará para outro local (ou para nada). Isso significa !rm #
ou delete(expand(#))
pode excluir um arquivo completamente diferente! Faça-o manualmente com cuidado ou use um bom script (eles são mencionados em muitas respostas aqui).
... ou tente criar uma função / comando / script você mesmo. Comece de sth simple como:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
após o vimrc recarregar, basta digitar :Rename new_filename
. Qual é o problema com este comando?
Teste de segurança 1: O que faz :Rename
sem argumento?
Sim, ele exclui o 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) gera um erro:
E471: Argumento necessário
Teste de segurança 2: E se o nome for o mesmo que o anterior?
Teste de segurança 3: E se o arquivo estiver em um local diferente do seu real?
Conserte você mesmo. 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 que !rm old_name
-> você não precisa se lembrar do nome antigo
!rm <C-R>#
é melhor do que !rm #
quando fazê-lo manualmente -> você verá o que realmente remove (motivo 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 de usar control+R
try | code1 | code2 | tryend
-> quando ocorrer um erro enquanto o código1, não execute o código2
:sav
(ou :saveas
) é equivalente a :f new_name | w
- consulte file_f - e preserva o histórico de desfazer
expand('%:p')
fornece o caminho completo da sua localização ( %
) ou da localização do arquivo alternativo ( #
)
Há uma função no .vimrc de Gary Bernhardt 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>
:!mv % %:h/new_name
Registrar %
contém o nome do arquivo atual. '%:h'
mostra o diretório 'head' que contém o arquivo atual, por exemplo: %:h
retorna /abc/def
quando o caminho completo do arquivo éabc/dev/my.txt
Que tal isso (aprimorado pela sugestão de Jake):
:exe "!mv % newfilename" | e newfilename
:exe "!mv % newfilename" | e newfilename
O Vim tem uma rename
função, mas infelizmente não retém a história.
A maneira mais fácil e independente de OS de renomear um arquivo sem perder o histórico 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 de buffers.
Se você deseja usar um comando rápido para renomear o arquivo, adicione 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 comando Rename
ajudará você a renomear rapidamente um arquivo.
Existe um plugin bem maior chamado vim-eunuch, de Tim Pope, que inclui uma função de renomeação e outras guloseimas (excluir, encontrar, salvar tudo, chmod, sudo edit, ...).
Para renomear um arquivo no vim-eunuch:
:Move filename.ext
Comparado com rename.vim:
:rename[!] filename.ext
Salva algumas teclas :)
Para renomear arquivos existentes sem usar plug-ins, você deve usar o comando
:Explore
Este comando permite explorar arquivos no diretório, excluí-los ou renomeá-los. você deve navegar para o arquivo necessário no R
comando explorer than type, que permitirá que você renomeie o nome do arquivo
Não sei se esse é o método "mais fácil", mas, assumindo que você já salvou seu arquivo (: w), invocaria o shell (: sh) e faria um simples cp foo foo.bak Para voltar ao editor use Ctrl-D / Sair. Lista útil de comandos do editor vi neste link
Esse pequeno script não é perfeito (o retorno de carro extra que você precisa pressionar), mas faz o trabalho.
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>