2012-06-04 13 views
13

¿Hay alguna manera de mover un archivo dentro de Vim? P.ej. Abrí un archivo foo/bar.txt en Vim. Sé 2 maneras de mover este archivo:Mover archivo dentro de Vim

Primera solución:

  1. Eliminar el tampón con :bd bar.txt
  2. realizar el movimiento de la cáscara con mv foo/bar.txt foo/bar2.txt
  3. carga el archivo en vim con :e foo/bar2.txt

Segunda solución:

  1. Cerrar Vim, por lo que todos los búferes estarán cerrados.
  2. Realice el movimiento en el shell ...
  3. Inicie Vim y cargue el archivo.

Pero estas dos soluciones son embarazosas. Lo sé, hay un complemento para cambiar el nombre de los archivos vim-enuch, pero ¿no hay una forma Vim para realizar dicha funcionalidad básica?

Respuesta

6

No hay forma atómica para mover un archivo de esa manera, pero esto debe ser cercana:

function! MoveFile(newspec) 
    let old = expand('%') 
    " could be improved: 
    if (old == a:newspec) 
     return 0 
    endif 
    exe 'sav' fnameescape(a:newspec) 
    call delete(old) 
endfunction 

command! -nargs=1 -complete=file -bar MoveFile call MoveFile('<args>') 

Ahora usted podría decir:

:MoveFile file2.txt 

Para cambiar el nombre a file2.txt

:MoveFile %.0 

para mover archivo2.txt a archivo2.txt.0

+1

Esta solución es mejor, porque puedo añadir estas líneas 5 a mi vimrc en lugar de cargar un plugin de peso pesado. – SvenK

+0

Acabo de actualizarlo después de algunas pruebas – sehe

+0

Los problemas de escape del nombre de archivo se ignoran por aire en la implementación provista. Para solucionarlo en este sentido, uno debe cambiar las dos últimas líneas de la función de la siguiente manera. Primero, 'exe 'sav' fnameescape (a: newspec)'; segundo, 'call delete (old)'. También es juicioso comprobar el valor de retorno de la función 'delete()' para informar al usuario en caso de que se elimine el archivo (la facilidad para detectar esta situación es otra ventaja de la función sobre '! Rm', además de su multiplataforma) –

3

si estás en el buffer bar.txt:

:w bar2.txt 
:!rm bar.txt 

Si bar2.txt ya existe en el directorio actual, utilice :w!.

+2

Pero '! Rm bar.txt' no cierra el búfer abierto – SvenK

+1

que es verdadero, cambie': sav' por ': w' – pb2q

+1

El búfer para' bar.txt' aún estará abierto. Podría cerrarse con 'bd '. –

24

También podría usar netrw (el explorador de archivos predeterminado) renombrar la funcionalidad.

  1. netrw abierta con :E
  2. Mover el cursor a la línea con el archivo que tiene la intención de cambiar el nombre, en este caso bar.txt. Se mueve al archivo en cuestión usando h, j, k, l o puede buscarlo con / (por ejemplo, /bar.txt)
  3. Marque R. A continuación, se le solicitará una nueva ruta de archivo. Cuando se hace entrar en la ruta de archivo golpeó <CR>
  4. mueve el cursor en el nuevo archivo y abrirlo con <CR>

Si bien esta solución puede no ser tan rápido como usar vim-eunch, lo hace le permiten ver el proyecto estructura a medida que cambia el nombre del archivo. Esto también le permitirá mover múltiples archivos a la vez.

Para ejecutar la lectura adicional :help netrw-move

+1

También se puede abrir el explorador de archivos con (': Sex' o': Vex') si uno tiene: E comando reasignado a algo. – installero

Cuestiones relacionadas