números de linha de mapeamento vimrc

números de linha de mapeamento vimrc

Eu tenho estas linhas no meu arquivo .vimrc:

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

Eles funcionam muito bem para adicionar e remover pontos de interrupção no gdb! Apenas um problema (que eu saiba)... por algum motivo, os números de linha dos anos 80 não funcionam. Se eu colocar meu cursor na linha 85 e pressionar F9, ele deverá colocar um ponto de interrupção na linha 85. Se eu colocar meu cursor na linha 75 e pressionar F9, ele deverá colocar um ponto de interrupção na linha 75.

Os pontos de interrupção resultantes são assim:

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

A linha 85 não funcionou. Eu testei os anos 80. Nenhum deles funciona. Todas as outras linhas parecem funcionar. Por que? Tenho certeza de que um de vocês, especialistas em VIM, pode me explicar isso. É quase como se o ":8" estivesse sendo interpretado como algum outro comando ou algo assim.

Responder1

%:8é válidomodificador de nome de arquivo, portanto está sendo interpretado pelo Vim como parte do :!comando.

Você pode usarexpand('%')para expandir manualmente %e, em seguida, citá-lo corretamente comshellescape(…,1):

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

informação relacionada