2012-04-26 6 views
5

Si uso ctrl-a para incrementar un número hexadecimal (o ctrl-x para disminuir) el número usará letras minúsculas si actualmente no hay otras letras mayúsculas.Hacer mayúsculas y minúsculas en vim al usar ctrl-a para incrementar

Por ejemplo, si incremento 0x009 obtengo 0x00a pero si incremento 0xA09 obtengo 0xA0A.

Quiero que use mayúsculas por defecto. ¿Alguien sabe como hacer esto? ¿Alguien más se preocupa?

+0

+1 para el conocimiento del día: 'Ctrl-a' y' Ctrl-x' :) – Niloct

+0

Los comandos pueden ser muy útiles en las macros. – Dean

Respuesta

5

Una manera difícil:

:nnoremap <C-A> m'<C-A>vUgUTx`` 

Explicación:

m'   # Create a mark on digit to increment. 
<C-A>  # Control-A 
v   # Visual select current letter. 
U   # Set visual selection (current letter) to uppercase. 
gUTx  # Set to uppercase (gU) next movement: (Tx) from current position to previous 'x' letter. 
``   # Go to position of previous mark. 

Así de esta manera crea una pequeña comportamiento diferente de la original, <C-A>, por ejemplo, en este caso:

A hex number 0x0ba in lowercase. 
     ^--- Cursor position 

Establecerá 0x0ba en 0x0BB pero el cursor se com e de vuelta a la letra n desde number, insteat estableciendo su posición en el número incrementado. Puedes jugar con marcas para cambiar este comportamiento. Espero que esto pueda ayudar.

+0

Muy bien explicado, ¡gracias! – Dean

+0

Quité 'm'' y' \ '\' 'para que se comportara más de cerca con el comportamiento original. – Dean

+0

Sé que esta pregunta tiene tres años, pero pensé que señalaría que esta solución solo funciona si usa '' solo en valores hexadecimales. Tan pronto como lo use en un número decimal, las cosas podrían estropearse. He hecho una adición que, sin dudas es "más pesada", pero también más robusta: 'noremap búsqueda ('x \\ | \ (\ <\)'," bpcn ") == 1? "\ vUgUTxFxe": "\ " noremap búsqueda ('x \\ | \ (\ <\)', "bpcn") == 1? "\ vUgUTxFxe": "\ " ' Esto hace una búsqueda de una x para determinar si es un dígito hexadecimal. Si es así, básicamente hace lo que Birei sugirió. No más capitalización. – Tumbler41

4

Uno puede prefijar constantes hexadecimales con 0X0x en lugar de con el fin de hacer que Vim usar mayúsculas al añadir o sustraer de ellos.

+0

Este es un buen punto. Sin embargo, estoy buscando específicamente una 'x' minúscula con los valores hexadecimales en mayúsculas. Estoy un poco quisquilloso si la pregunta no fue revelada;) – Dean

Cuestiones relacionadas