¿Puede hacer que Vim expanda un pliegue automáticamente cuando el cursor lo toca?¿Hay alguna manera de expandir un plegado de Vim automáticamente cuando colocas el cursor sobre él?
¿Hay alguna manera de expandir un plegado de Vim automáticamente cuando colocas el cursor sobre él?
Respuesta
Consulte la opción foldopen
. Controla qué grupos de comandos conducirán a abriendo un pliegue si el cursor se mueve hacia un pliegue cerrado.
Tenga en cuenta que los movimientos verticales no abren un doblez cerrado, sin embargo. Además, no hay configuración en foldopen
para permitir este comportamiento. Cuando el artículo hor
es configurado en la opción foldopen
, para abrir un pliegue se puede usar h
, l
u otros comandos de movimiento horizontal . En caso de que si es crucial abrir automáticamente un pliegue en cualquier movimiento del cursor que lo toque, uno puede abordar este problema reasignando algún subconjunto de comandos de movimiento vertical como se muestra a continuación.
nnoremap <silent> j :<c-u>call MoveUpDown('j', +1, 1)<cr>
nnoremap <silent> k :<c-u>call MoveUpDown('k', -1, 1)<cr>
nnoremap <silent> gj :<c-u>call MoveUpDown('gj', +1, 1)<cr>
nnoremap <silent> gk :<c-u>call MoveUpDown('gk', -1, 1)<cr>
nnoremap <silent> <c-d> :<c-u>call MoveUpDown("\<lt>c-d>", +1, '&l:scroll')<cr>
nnoremap <silent> <c-u> :<c-u>call MoveUpDown("\<lt>c-u>", -1, '&l:scroll')<cr>
nnoremap <silent> <c-f> :<c-u>call MoveUpDown("\<lt>c-f>", +1, 'winheight("%")')<cr>
nnoremap <silent> <c-b> :<c-u>call MoveUpDown("\<lt>c-b>", -1, 'winheight("%")')<cr>
function! MoveUpDown(cmd, dir, ndef)
let n = v:count == 0 ? eval(a:ndef) : v:count
let l = line('.') + a:dir * n
silent! execute l . 'foldopen!'
execute 'norm! ' . n . a:cmd
endfunction
un ser inferior, pero un poco más económica solución sería abrir un pliegue en cada movimiento del cursor .
autocmd CursorMoved,CursorMovedI * silent! foldopen
Desafortunadamente, esta solución no es general. Después de abrir el pliegue debajo del cursor , el cursor se posiciona en la primera línea de ese pliegue. Si este comportamiento es indeseable, se puede seguir la dirección vertical de un movimiento y colocar el cursor en la última línea del doblez cuando el cursor se mueve de abajo arriba.
autocmd CursorMoved,CursorMovedI * call OnCursorMove()
function! OnCursorMove()
let l = line('.')
silent! foldopen
if exists('b:last_line') && l < b:last_line
norm! ]z
endif
let b:last_line = l
endfunction
Sin embargo, no se abrirá un pliegue si el movimiento salta por encima de la tapa. Para el ejemplo , 2j
en la línea justo arriba de un pliegue colocará el cursor en la línea justo después de ese pliegue, no en la segunda línea.
Vuelva a colocar la solución 'CursorMoved' de las revisiones anteriores. –
:help fdo
y posiblemente :help fcl
pueden ayudarlo. Tengo esta línea en mi .vimrc:
set foldopen=block,hor,insert,jump,mark,percent,quickfix,search,tag,undo
set foldopen=all
parece hacer lo que quiera. También puede hacer una AutoCommand para el movimiento del cursor:
au CursorMoved * call AutoOpen()
llamar a una función como:
function! AutoOpen()
if foldclosed(".") == line(".")
call feedkeys("zo")
endif
endfunction
Si quieres que esto funcione también en el modo de inserción, utilice:
au CursorMoved,CursorMovedI * call AutoOpen()
Desafortunadamente, este enfoque tiene inconvenientes (ver mi respuesta). –
@ib: Sé que no es perfecto, pero no entiendo los inconvenientes. ¿Puedes elaborar? Gracias. – Eelvex
Es obvio (y ya se describió en mi respuesta, por cierto).Mueva el cursor a la línea al lado de un pliegue cerrado y mueva una línea hacia arriba (con 'k', por ejemplo). Se abrirá el doblez y el cursor pasará a estar en la primera línea de ese doblez, no en el último, como debería ser lógicamente (es decir, la semántica del movimiento vertical línea por línea). Para ver otra desventaja, coloque el cursor en la línea justo arriba de un pliegue cerrado y escriba '2j'. El cursor saltará sobre el pliegue completo, se moverá no dos líneas hacia abajo, sino tantas líneas como tenga el doblez. –
- 1. Confusión sobre el plegado de vim: ¿cómo deshabilitar?
- 2. Jquery: ¿hay alguna manera de resaltar el texto de una Div cuando haces clic en él?
- 3. ¿Hay alguna manera de ingresar automáticamente al ejecutar un shell?
- 4. Función de plegado en vim
- 5. plegado de rubí automático en vim
- 6. ¿Hay alguna manera de cambiar el modo predeterminado de vim?
- 7. ¿Hay alguna manera de pasarle texto arbitrario a Vim?
- 8. En Vim, ¿hay alguna manera de copiar el número de línea actual en un búfer?
- 9. ¿Hay alguna forma de pasar el cursor sobre un elemento y afectar a un elemento diferente?
- 10. ¿Hay alguna manera de iterar sobre un diccionario?
- 11. ¿Hay alguna manera de anular automáticamente ToString() en una clase?
- 12. ¿Hay alguna forma de que no se elimine el popover cuando se presiona fuera de él?
- 13. ¿Hay alguna manera de expandir un directorio JFileChooser sin un mouse?
- 14. ¿Hay alguna manera de pegar la salida de un comando vim en el búfer?
- 15. Expandir automáticamente veces al ir a un número de línea
- 16. Delphi: ¿Hay alguna manera de acceder a registros en un TClientDataset además de mover el cursor
- 17. ¿Hay alguna manera de resaltar búsquedas múltiples en (g) Vim?
- 18. en vim, ¿hay alguna manera de guardar marcadores entre sesiones?
- 19. ¿Hay alguna manera de evitar que el navegador complete automáticamente un cuadro de entrada?
- 20. Sintaxis-highlight Python en una línea de plegado de vim
- 21. ¿Hay alguna manera de cambiar el propietario de un JDialog?
- 22. Expandir pestañas en VIM
- 23. ¿Hay alguna manera de cambiar el comportamiento del menú vim omnicomplete?
- 24. Cuando está en el modo de inserción de Vim, ¿hay alguna manera de agregar la autocompletación de ruta de archivo?
- 25. ¿Hay alguna manera de ejecutar silenciosamente un comando bash después de guardar un archivo en vim?
- 26. ¿Hay alguna manera de entrar automáticamente en el depurador cuando se llaman a las funciones de mi biblioteca de clase?
- 27. Vim - comando ex mode - ¿hay alguna forma de mover la posición del cursor?
- 28. ¿Hay alguna manera de determinar automáticamente las dependencias al configurar un archivo de control dpkg?
- 29. ¿Hay alguna manera de obtener el punto de inserción en un cuadro de texto de javascript?
- 30. ¿Hay alguna manera de cambiar el delimitador después de linenumber in vim?
Por qué lo hizo aceptas la respuesta de Eelvex y no la mía? No solo propuse esta solución (y su versión aún más elegante, 'au CursorMoved, CursorMovedI * sil! Foldo') * anterior *, ya que es obvio desde el historial de revisiones, sino que también desarrolló la manera de resolver el problema de forma más consistente. –
Lo siento. No recuerdo por qué lo hice. Fijo. – dan