2011-07-10 10 views
6

Al usar ventanas divididas en VIM, a veces creo una nueva división de un archivo ya abierto en otra división (generalmente con complementos que abren una unidad de prueba para un archivo dado en una nueva división).Div. Vim a menos que esté abierto

¿Hay alguna forma de volver a asignar el comando dividir para que compruebe si el archivo ya está abierto antes de la división y, si lo está, centrarse en él?

Respuesta

9

No se puede volver a asignar el comando existente split, por lo que yo sé, pero se puede lograr el mismo efecto por la misma escritura de una nueva función Split y luego usando una abreviatura de modo de comando (cabbrev).

Aquí hay una función/mapeo que debe hacer lo que quiera.

function! MySplit(fname) 
    let bufnum=bufnr(expand(a:fname)) 
    let winnum=bufwinnr(bufnum) 
    if winnum != -1 
     " Jump to existing split 
     exe winnum . "wincmd w" 
    else 
     " Make new split as usual 
     exe "split " . a:fname 
    endif 
endfunction 


command! -nargs=1 Split :call MySplit("<args>") 
cabbrev split Split 

Tenga en cuenta que esto sólo se "marca" en cuanto a grietas existentes en la pestaña actual, y tampones ocultos se ignoran. (Sin embargo, no debería ser demasiado difícil agregar más casos para mejorar esta funcionalidad.)

+1

genial, gracias a un registro – iNecas

3

Una alternativa sería usar :drop {file}.

Edit the first {file} in a window. 
- If the file is already open in a window change to that 
    window. 
- If the file is not open in a window edit the file in the 
    current window. If the current buffer can't be abandoned, 
    the window is split first. 

También usando :sb para cambiar amortiguadores también podría ser de utilidad. Ver vim: move to buffer?

Para más información:

:h :drop 
:h :sb 
:h 'swb' 
0

Esa es una de las características de searchInRuntime.

:GSplit y :GVSplit pueden renombrarse, admiten la finalización del nombre de archivo, y le preguntará qué archivo abrir cuando varios coinciden con el patrón en &path.

+0

Parece un plugin maravilloso, ¿sabe cómo puede ser instalado por vundle o agente patógeno? – Erik

+0

No tengo idea. Animo a utilizar vim-addon-manager en su lugar. A diferencia de sus competidores, VAM maneja dependencias y todos mis complementos dependen en la lista de otro plugin (de biblioteca) (que también estoy manteniendo). Al final, es más fácil de esta manera. De lo contrario, tendrá que dar la URL de los repositorios SVN para vundle o patógeno. –

+0

Nunca escuché hablar de VAM, lo intentaré, gracias. – Erik

Cuestiones relacionadas