2012-02-02 4 views
9

Yo uso plug-in "Buffet", y hay locales-a-memoria intermedia de correspondencias "d" para eliminar tampón bajo el cursor.Vim: resolver la ambigüedad de las asignaciones de claves en un búfer específico para evitar tiempo de espera

También uso plugun Surround, y no hay mapa global "ds" que significa "envolvente de eliminación".

Por lo tanto, cuando presiono "d" en la ventana del Buffet, Vim espera un segundo antes de ejecutar la asignación "d". Sé de &timeoutlen, pero no quiero cambiarlo. De modo que quiero resolver la ambigüedad de las asignaciones de teclas para "d" en la ventana del Buffet para evitar el tiempo de espera en d.

Para resolver el problema, quiero desasignar en la ventana de Buffet todas las asignaciones que comienzan con "d", excepto las propias asignaciones de Buffet. ¿Cómo puedo hacer eso?

P.S. He leído sobre maparg() y mapcheck(), pero parece que no son lo que necesito, desafortunadamente.

Respuesta

4

Parece que encontré la solución yo mismo:

au BufEnter buflisttempbuffer* nunmap ds 
au BufLeave buflisttempbuffer* nmap ds <Plug>Dsurround 

Espero que haya un enfoque más universal (para eliminar realmente todas las asignaciones a partir de "d"), pero en este momento no pude encontrarlo.

Incluso si descubrí cómo obtener todas estas asignaciones, desafortunadamente no puedo hacer unmap <buffer> ds, porque ds es un mapeo global. Sin embargo, estoy seguro de que yo debería ser capaz de deshabilitar la asignación global de algún búfer. Vim es genial, pero no perfecto.

Bueno, ahora me funciona.

0

La forma más sencilla de hacerlo es:

:e /WHERE/YOU/HAD/INSTALLED/buffet.vim 
:%s:map <buffer> <silent> d:"&: 
:wq 
$ vim # Restart Vim to take effect... 

lo general, no puede unmap basado en un patrón.

Si desea utilizar otra tecla (por ejemplo, con <leader>, basta con cambiar esta línea en el plugin:

map <buffer> <silent> d :call <sid>deletebuffer(0)<cr> 
+0

Hmmm, parece que me has entendido mal. Acabas de recomendar deshabilitar las asignaciones de '' d' '' para Buffet (en realidad comentar estas asignaciones), pero eso no es lo que realmente necesito. Por el contrario, quiero ** utilizar ** d', pero quiero usarlo sin este tiempo de espera. Lástima que no hay forma de 'desasociar' por patrón, pero tal vez haya alguna manera complicada. Traté de encontrarlo yo mismo (escribí sobre 'maparg()' y 'mapcheck()'), pero todavía no tuve suerte. –

+0

Bueno, desde mi punto de vista, lo que había escrito: 'Quiero desasignar en la ventana de Buffet todas las asignaciones que comienzan con' d '' significa que ya no las quiere. –

+0

Quise decir que quiero desasignar todas las asignaciones que comienzan con "' d' ", pero excepto las propias asignaciones de Buffet =) bueno, encontré la solución local, no universal (vea mi respuesta a mi pregunta) –

-1

Buffet es un plugin muy joven, no creo que es utilizado por tantas personas como sea Command-T o NERDTree, por lo que es posible que no reciba muchas respuestas. Su autor ha sido muy receptivo con los numerosos hilos que ha creado allí, póngase en contacto con él directamente o cree un problema en Buffet github.

+4

No creo que deba. Es un problema de configuración local. –

2

Ahora que la pregunta ha sido "reformulada", esta solución ya no es relevante, pero la publicaré de todos modos ya que dediqué unos minutos a ella.

Aquí hay una función que toma la salida de map <letter> y extrae los mapas individuales. Entonces los desagrupa a todos.

function! Unmap(leader) 
    redir => maps 
     sil exe "map " . a:leader 
    redir END 
    let maps_list = split(strtrans(maps),'\^@') 
    if len(maps_list) > 1 
     for this in maps_list 
      let mapn = matchstr(this,"^\\w\\s*\\zsd\\w*\\>") 
      exe "unmap " . mapn 
     endfor 
    endif 
endfunction 

Ejemplo de uso: call Unmap("d"). Esto eliminará todas las asignaciones que comiencen con d, dejando solo los valores predeterminados de Vim.

Descargo de responsabilidad: esto no ha sido probado rigurosamente. En particular, no sé qué tan portátil es el carácter \^@, pero así es como se ve en mi máquina (Win32).

+0

Gracias, en realidad quería obtener algo así, y luego lo pondría en buffet.vim justo antes de su propia definición de mapeos, pero el problema principal es que todas las asignaciones globales se eliminarán permanentemente, no solo para el buffer local de Buffet. Es muy lástima que Vim no permita desasignar algunas asignaciones globales solo para el búfer local. –

0

Esta pregunta es bastante antigua, pero si aún está interesado, es posible que desee probar Bufstop.

Este problema lo maneja el complemento, puede presionar la tecla d para eliminar un búfer, y no obtendrá ningún tiempo de espera si instaló otros complementos que tienen asignaciones globales.

0

Un truco barato que funcionó para mí fue hacer que el timeoutlen fuera tan corto que se volviera más o menos instantáneo. Siempre que no use múltiples asignaciones de teclas, cubrirá todos los complementos en una sola toma.

No queremos que la configuración se quede, sin embargo, la eliminamos cada vez que dejamos el búfer.

Añadir este modo que se ejecuta dentro de su tampón personalizado:

augroup no_map_chords 
    autocmd! 
    autocmd BufEnter <buffer> let g:bak_timeoutlen = &timeoutlen | set timeoutlen=1 
    autocmd BufLeave <buffer> let &timeoutlen = g:bak_timeoutlen | unlet g:bak_timeoutlen 
augroup END 

Una técnica similar podría ser utilizado para un tipo de archivo específico, o en otros parámetros tales "globales".

Cuestiones relacionadas