Я работаю с довольно много мультиплатформенным кодом C/C++, разделенным обычными #defines (#if WIN, #if UNIX и т. Д.). Было бы неплохо, если бы я мог бы автоматически сбрасывать разделы, которые мне сейчас не интересны, когда я открываю файл. Я просматривал архивы скриптов vim, но я не нашел ничего полезного. Какие-либо предложения? Места для начала?Автоматически складывающиеся #defines в vim
ответ
Просто добавьте складную область к вашему синтаксису http://vim.wikia.com/wiki/Syntax_folding_of_Vim_scripts#Syntax_definitions
:syn region myFold start="\#IF" end="\#ENDIF" transparent fold
:syn sync fromstart
:set foldmethod=syntax
Чтобы добавить @hometoasts ответ, вы можете добавить эту команду в качестве комментария в первые десять последних десять строк файла и Vim будет автоматически использовать его для этого файла.
/* vim: syn region regionName start="regex" end="regex": */
Быстрое добавление к добавлению Дентона: использовать новое правило синтаксиса с любым C или C++ код, добавьте его в файл в $VIMRUNTIME/syntax/c.vim
и cpp.vim
. ($VIMRUNTIME
, где живет ваш код Vim: ~/.vim
в Unix.) Кроме того, значения для start
и end
в определении синтаксиса являются регулярными выражениями, поэтому вы можете использовать ^#if
и ^#endif
, чтобы убедиться, что они соответствуют только этим строкам в начале линия.
Я всегда использовал forldmethod = marker и определил свои собственные метки меток, помещенные в комментарии.
Это определение символов, определяющих открытые и закрывающие складки. в этом случае open - «< (« и close is »)>« замените их тем, что вы хотите.
set foldmethod=marker
set foldmarker=<(,)>
Это моя пользовательская функция, чтобы решить, что для отображения свернутого текста:
set foldtext=GetCustomFoldText()
function GetCustomFoldText()
let preline = substitute(getline(v:foldstart),'<(','<(+)','')
let line = substitute(preline,"\t",' ','g')
let nextLnNum = v:foldstart + 1
let nextline = getline(nextLnNum)
let foldTtl = v:foldend - v:foldstart
return line . ' | ' . nextline . ' (' . foldTtl . ' lines)>'
endfunction
Надежда, что помогает.
У меня есть огромная база кода и большое количество #defines. Каждый файл имеет множество # ifdef's и большую часть времени они вложены. Я пробовал многие скрипты vim, но они всегда использовали для некоторых ошибок с кодом, который у меня есть. Таким образом, в конце концов, я положил все мои определяет в заголовочный файл, и включить его в файл, который я хотел работать и сделал GCC на нем как этот
НКУ -E -C -P source.cpp> output.cpp
Команда -E получает gcc для запуска только препроцессора в файле, поэтому все ненужные коды в неопределенном # ifdef удаляются. Параметр -C сохраняет комментарии в файле. Опция -P запрещает создание линейных маркеров на выходе препроцессора.
Вот почему я люблю vim, ха-ха. – 2008-09-23 14:20:56
Я нахожусь на vim 7.0, и я помещаю 3 строки в конец моего .vimrc, но я вижу, что некоторые разделы моего файла становятся произвольно сложены. Может кто-нибудь, пожалуйста, отправьте точные шаги, чтобы сделать следующее: 1. Сложите на основе env varibles, например. если есть #ifdef, а переменная env не установлена, то сбрасывайте. 2. Сложите все ifdefs (независимо от того, насколько глубоко в иерархии), и если вы хотите их увидеть, вы делаете zo. – 0fnt 2011-02-02 12:51:19