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?

Foi útil?

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:

  1. Renomeie o arquivo no disco.
  2. Renomeie o arquivo no repositório git.
  3. Recarregar o arquivo para o buffer atual.
  4. 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}

Exemplo:

:!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 .: %:hreturns /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 #

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top