Vim - Modo visual - Mejorar la selección de palabras

Vim - Modo visual - Mejorar la selección de palabras

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

ingrese la descripción de la imagen aquí

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.

ingrese la descripción de la imagen aquí

(*)

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.

ingrese la descripción de la imagen aquí

Este es el comportamiento deseado:

ingrese la descripción de la imagen aquí

Si tiene alguna solución alternativa o solución alternativa, también se lo agradecería.

¡Gracias!

Respuesta1

Esto vmapse 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 :callse invoca con el rango visual agregado automáticamente '<,'>. :help :callexplica:

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

información relacionada