У меня в файле .vimrc есть следующие строки:
:map <F9> :exe ':!gdbset bp "%:'.line(".").'"'<CR><CR>
:map <F8> :exe ':!gdbset clear bp "%:'.line(".").'"'<CR><CR>
Они отлично работают для добавления и удаления точек останова в gdb! Только одна проблема (о которой я знаю)... по какой-то причине не работают номера строк в 80-х. Если я поставлю курсор на строку 85 и нажму F9, то это должно поставить точку останова на строку 85. Если я поставлю курсор на строку 75 и нажму F9, то это должно поставить точку останова на строку 75.
Полученные точки останова выглядят следующим образом:
b myfile.cc:5
b myfile.cc:75
Строка 85 не работает. Я проверил 80-е. Ни одна из них не работает. Все остальные строки, похоже, работают. Почему? Я уверен, что один из вас, экспертов VIM, может мне это объяснить. Это почти как если бы ":8" интерпретировались как какая-то другая команда или что-то в этом роде.
решение1
%:8
является действительнымимя файла-модификатор, поэтому Vim интерпретирует его как часть команды :!
.
Вы можете использоватьexpand('%')
вручную развернуть %
, а затем правильно заключить его в кавычкиshellescape(…,1)
:
:map <F9> :exe '!gdbset bp' shellescape(expand('%').':'.line('.'),1)<CR><CR>
:map <F8> :exe '!gdbset clear bp' shellescape(expand('%').':'.line('.'),1)<CR><CR>