Me gustaría abrir un archivo desde otra rama en el repositorio git actual. He visto esta pregunta SO , pero las sugerencias para combinarlo con Vim son engorrosas (canalizar a Vim, abrir stdin, establecer tipo de archivo, etc. manualmente). ¿Hay alguna forma más sencilla de conservar el resaltado de sintaxis, la configuración del tipo de archivo, etc.?
Si ayuda:
- Tengo instalado el complemento fugitivo (aunque rara vez se usa).
- No necesito modificarlo.
El archivo puede ser el archivo del búfer abierto actualmente o uno diferente.
[RO]
en la línea de estado).fugitive
necesita la ruta desde la raíz del repositorio. La respuesta ya cubre esto, pero supuse erróneamente que el fugitivo podría entender cuando estamos en un subdirectorio particular del repositorio.Esto es un poco más amplio de lo que OP solicitó, pero para las personas que no desean usar complementos, y posiblemente otros sistemas de control de revisión, este pequeño fragmento tiende a funcionar bastante bien:
Crea una nueva ventana y muestra el archivo allí leyendo la salida del comando dado en el nuevo búfer. Esto, por supuesto, funciona con cualquier comando externo, no solo con git.
Ejemplo para bzr (donde la sintaxis REV puede especificar una rama):
Ejemplo para hg (no estoy seguro acerca de las ramas en hg; no lo use lo suficiente)
Ejemplo para svn (
Probablemente aún desee configurar el tipo de archivo para obtener resaltado de sintaxis como en las publicaciones SO, pero al menos no tiene que meterse con las tuberías.
Una vez abierto, puede guardarlo con un nuevo nombre con
:w filename
o:saveas filename
, ya que Vim todavía no tendrá un nombre de archivo. Si no desea poder editarlo, también puede agregar ay:setlocal readonly
/ o:setlocal nomodifiable
.-Editar: tipo de archivo automático-
Es un poco más de trabajo, pero puedes pedirle a Vim que adivine el tipo de archivo con
Pero, dado que Vim aún no tiene un nombre, esto no siempre funciona bien (por ejemplo, saqué un código C y lo adivinó
filtype=conf
.Podemos darle un nombre guardándolo, pero no queremos sobrescribir un archivo posiblemente existente. También podemos establecer el nombre del archivo (¡Gracias @PeterRincker!), Pero de nuevo, no queremos arriesgarnos a colisiones. Como es poco probable que exista un archivo que sea el nombre de la rama y el nombre del archivo juntos, los concatenaremos con un separador arbitrario
Donde
"file"
se reemplaza con el nombre de archivo real y"branch"
con el nombre de la sucursalPor supuesto, en este punto casi estamos escribiendo un complemento ;-)
Al unirlo todo, aquí está como una función específica de git que podría colocar en su vimrc:
que podría envolver en un comando o llamar directamente, por ejemplo
call GitFile("whateverBranch","myfile.c")
. Obtendrá una nueva ventana con un búfer llamadowhateverBranch-myfile.c
fuente
:file
para nombrar su archivo en lugar de tener un archivo temporal. Ver:h :file