2011-01-29 12 views
5

Vine a la idea de que <C-a> en el modo normal de Vim no solo debería aumentar los números sino alternar booleanos. Tiene sentido si se tiene en cuenta true y false como enteros módulo 2.Sinónimo de modo normal de Vim CTRL-A?

Por lo tanto, downloaded an excellent script que haga el trabajo cabelludo y escribieron una nueva definición de <C-a>:

fun! NewCA() 
    let cw = tolower(expand("<cword>")) 
    if cw == "true" || cw == "false" 
     ToggleWord 
    else 
     " run the built-in <C-a> 
     execute "normal \<C-a>" 
    endif 
endfun 
command! NewCA :call NewCA() 
nnoremap <C-a> :NewCA<cr> 

Pero como suele suceder, nnoremap doesn' ir tan lejos como para verificar las funciones internas. Obtengo un comportamiento recursivo si mi cursor no está en las palabras true o false.

En este punto, lo juro mucho, ¿por qué Bram no eligió una excelente idea de Emacs, que todo debería ser funciones y enlaces de teclas que se puedan setear libremente. Entonces solo pude verificar la función para <C-a> y llamarla en esa función. Pero no, no puedo encontrar tal función, y las frases execute "normal foo" parecen ser el idioma Vim.

¿Alguna sugerencia sobre cómo podría hacer <C-a> trabajo de tal manera que

  • booleanos activar Cuando el cursor se encuentra sobre una palabra true o false
  • caer de nuevo a una función de <C-a> comportamiento de otro modo

¡Ayuda apreció!

Respuesta

8

cambio

execute "normal \<C-a>"
a: "!"

normal! ^A

se puede obtener mediante la ejecución^Un

<C-v><C-a>
en modo normal

la al final de "asignación predeterminada utilización" digamos normales

+0

Ambas respuestas tienen la misma solución, correcta. Lo comprobé como la respuesta aceptada solo para darle la bienvenida a la comunidad. :) – progo

6

De :help :normal

:norm[al][!] {commands}  
... 
If the [!] is given, mappings will not be used. 
.... 

definiendo también no es necesaria una orden, puede directamente

nnoremap <C-a> :call NewCA() 
+0

¡Oh mi, me siento tan novato! Debería haberlo sabido mejor ... leer los documentos con más cuidado. Muchas gracias De hecho, tuve la declaración '' command! 'Extraña para propósitos de depuración, y tienes razón. :) – progo

+0

tenga en cuenta que el mapa necesita un '' final como: 'nnoremap : llame a NewCA() ' – radke

Cuestiones relacionadas