Я пытаюсь выполнить все определения функций в исходном файле C++, ]]
должно быть хорошо, если все функции отступов правильно, как требуется, но это может быть неверно для некоторых исходные файлы, такие как функции внутри пространства имен, имеют дополнительный отступ. Я думаю, поиск следующего символа начала функционального блока, который находится на том же уровне, что и текущий (например, второй скользящий скобок верхнего уровня), будет прекрасным обходным решением. Есть ли такая команда или расширение, которое это делает?Перемещение всех записей функций C/C++ в Vim
ответ
Vim как универсальный текстовый редактор не имеет глубоких знаний о различных языках программирования. В зависимости от требуемой точности регулярное выражение может уже улавливать наиболее распространенные определения функций. Затем вы можете использовать что-то вроде моего CountJump plugin, чтобы сделать отображения движения из шаблонов.
Другим хорошим источником является подсветка синтаксиса, в частности, складной. Если вы сконфигурируете :setlocal foldmethod=syntax
, вы можете использовать встроенные команды навигации по стрелке (например, zj
/zk
) для навигации.
Для лучшей точности вам нужен внешний инструмент, например ctags
, для анализа исходного кода на C и определения имен функций. Плагины, такие как TagBar (уже упоминалось в комментариях) и TagList помогут вам перечислить и перемещаться затем.
плагин как TagList или Tagbar (в сочетании с Ctags) может помочь, но вы можете сделать что-то вроде:
:vim /^\s*\w\+\s\+\w\+\s*(.*)/ % | cw
заполнить окно QuickFix с каждым определением функции в текущем файле.
В качестве альтернативы, по умолчанию python ftplugin поставляется с хорошей общей функцией и красивыми сопоставлениями, которые мы можем перепрофилировать. Поместите следующие строки в ~/.vim/after/ftplugin/cpp.vim
:
function! Custom_jump(motion) range
let cnt = v:count1
let save = @/
mark '
while cnt > 0
silent! execute a:motion
let cnt = cnt - 1
endwhile
call histdel('/', -1)
let @/ = save
endfunction
nnoremap <silent> <buffer> ]] :call Custom_jump('/^\s*\w\+\s\+\w\+\s*(.*)')<cr>
nnoremap <silent> <buffer> [[ :call Custom_jump('?^\s*\w\+\s\+\w\+\s*(.*)')<cr>
спасибо. Таким образом, было выбрано множество несвязанных круглых скобок. – Thomson
Я не делаю C++, поэтому у меня нет образца реального мира, чтобы проверить его, но он отлично работал на образце с пространством имен, найденным в Интернете. (hmm ... он будет прыгать на 'else if (' также). Если у вас есть файл с образцом, он будет где-то, чтобы я мог проверить его дальше. – romainl
- 1. Перемещение буфера в vim через экземпляры vim
- 2. Vim: Перемещение по коду
- 3. Перемещение столбцов/текст в VIM
- 4. Перемещение вправо дважды в vim?
- 5. Перемещение слов CamelCase в vim
- 6. Перемещение курсора/положения в Vim
- 7. Отменить перемещение курсора в Vim
- 8. Vim errorformat несколько записей
- 9. История записей Vim
- 10. Перемещение записей DNS TXT
- 11. Перемещение записей автозаполнения в XCode
- 12. Перемещение записей из таблиц
- 13. Перемещение/перемещение нескольких выбранных функций - OpenLayers
- 14. Vim: w перемещение по подслову
- 15. событие не случилось на перемещение символа в Animate CC (HTMLCanvas)
- 16. Перемещение деклараций метода C++ из файла .hh в .cc
- 17. Обратное перемещение в автозавершении линии Vim
- 18. Перемещение переменных и параметров функций?
- 19. Перемещение и переупорядочение записей постоянно
- 20. Перемещение и удаление записей ArrayList
- 21. Что такое «var cc = cc = cc || {};» line делать в Cocos2D?
- 22. Перемещение записей в столбцы для огромных таблиц +800 миллионов записей
- 23. Выполнение всех функций в SQL
- 24. выполнение всех функций в скрипте
- 25. Загрузка всех функций в PHP
- 26. подсветка названий классов и функций в Vim
- 27. Отображение стека вызовов функций в vim
- 28. Как скрыть определения функций в Vim?
- 29. Перемещение функций в Linux без dlsym
- 30. Перемещение функций в другой класс C++
ли не прямо ответить на этот вопрос, но вы хотели бы проверить плагин TagBar: http://majutsushi.github.com/tagbar/ – Rich
'foldmethod = syntax' также может быть полезным. – Rich