números de línea de mapeo vimrc

números de línea de mapeo vimrc

Tengo estas líneas en mi archivo .vimrc:

:map <F9> :exe ':!gdbset bp "%:'.line(".").'"'<CR><CR>
:map <F8> :exe ':!gdbset clear bp "%:'.line(".").'"'<CR><CR>

¡Funcionan muy bien para agregar y eliminar puntos de interrupción en gdb! Sólo un problema (que yo sepa)... por alguna razón, los números de línea en los años 80 no funcionan. Si coloco mi cursor en la línea 85 y presiono F9, entonces debería poner un punto de interrupción en la línea 85. Si coloco mi cursor en la línea 75 y presiono F9, debería poner un punto de interrupción en la línea 75.

Los puntos de interrupción resultantes se ven así:

b myfile.cc:5
b myfile.cc:75

La línea 85 no funcionó. He probado los años 80. Ninguno de ellos funciona. Todas las demás líneas parecen funcionar. ¿Por qué? Estoy seguro de que alguno de ustedes, expertos en VIM, podrá explicarme esto. Es casi como si el ":8" se interpretara como algún otro comando o algo así.

Respuesta1

%:8es un validomodificador de nombre de archivo, por lo que Vim lo interpreta como parte del :!comando.

Puedes usarexpand('%')para expandir manualmente %y luego citarlo adecuadamente conshellescape(…,1):

:map <F9> :exe '!gdbset bp'       shellescape(expand('%').':'.line('.'),1)<CR><CR>
:map <F8> :exe '!gdbset clear bp' shellescape(expand('%').':'.line('.'),1)<CR><CR>

información relacionada