Caballeros/Damas,
No entiendo por qué vim muestra el siguiente comportamiento cuando activo el siguiente acceso directo en modo visual (.vimrc):
vmap <script> <C-LEFT> :call Test()<CR>
function! Test()
"empty
endfunction
Vim va a la primera columna de la línea encima de la línea donde activo el acceso directo y muestra lo siguiente ": '<,'> call Test ()" en la barra de estado. Pero esto sólo sucede cuando llamo a una función, cuando uso un comando como "$" (Ver *) el comportamiento es el esperado.
(*)
vmap <C-LEFT> $
Mi objetivo es hacer que Vim considere la "pestaña" como una palabra cuando uso la combinación "Ctrl+Izquierda", porque cuando el primer carácter de la línea es una "pestaña", Vim selecciona la primera palabra en la línea superior.
Este es el comportamiento deseado:
Si tiene alguna solución alternativa o solución alternativa, también se lo agradecería.
¡Gracias!
Respuesta1
Esto vmap
se aplica cuando vim está en modo Visual o Seleccionar. No dijiste qué texto se seleccionó cuando activaste el mapa.
El comportamiento sorprendente puede ser el resultado de la
:'<,'>
rango que se suministra automáticamente cuando cambia del modo Visual al modo Ex usando :. También la forma en que las funciones definidas por el usuario manejan los rangos de forma predeterminada.
Dicho esto, esperaría que el cursor termine en la última línea de la selección visual. No puedo reproducir el comportamiento que usted describe.
:help :call
:help '<
:help v_:
Respuesta2
Esto se debe a que :call
se invoca con el rango visual agregado automáticamente '<,'>
. :help :call
explica:
Cuando se proporciona un rango y la función no lo maneja por sí misma, la función se ejecuta para cada línea del rango, con el cursor en la primera columna de esa línea. El cursor se deja en la última línea (posiblemente movido por la última llamada a la función).
Entonces necesitas borrar el rango
vmap <script> <C-LEFT> :<C-u>call Test()<CR>
o hacer que la función lo maneje:
function! Test() range
Respuesta3
"Resolví" este problema utilizando el siguiente enfoque:
" Note: "Normal" movement with "Ctrl+Right"! By Questor
nmap <silent> <C-Right> e
imap <silent> <C-Right> <C-o>e<Right>
vmap <silent> <C-Right> e
" Note: "Normal" movement with "Ctrl+Left"! By Questor
nmap <silent> <C-Left> b
imap <silent> <C-Left> <C-o>b
vmap <silent> <C-Left> b
Sin embargo, tenga en cuenta que no uso una función. Si se usara una función, tendría que proceder como explica Ingo Karkat en su respuesta (usando : <C-u>
).
Con este sencillo enfoque "soluciono" el comportamiento no deseado de Vim explicado anteriormente.
Vea un ejemplo de uso enhttps://github.com/eduardolucioac/groovim/blob/master/.vimrc
[]'s