14

У меня есть foldmethod=indent set в моем ~/.vimrc , и в целом это работает для меня, и я хотел бы сохранить его.

Тем не менее, у меня есть несколько файлов, которые я регулярно редактирую (и которые находятся под моим эксклюзивным контролем), и которые я хотел бы добавить в систему на основе маркеров, в частности, чтобы при открытии файла большой раздел редко просматривается (который уже «разделен» отступом) предварительно сложен. Похоже, что foldmethod=marker позволит мне сделать это (я не возражаю против нечетного комментария в файле, чтобы указать эти «предварительные сгибы», если это необходимо), но я все еще хочу foldmethod=indent чтобы я мог использовать zc , zo , и так далее, чтобы затем сложить или развернуть разделы отступом. Насколько я могу судить, я не могу установить метод сгибания для нескольких значений.

Есть ли другой способ добиться этого (в идеале, используя что-то встроенное в сам файл)?

1 ответ1

10

Каждое окно может иметь свое собственное локальное значение 'foldmethod' ; то, что вы устанавливаете в ~/.vimrc это просто глобальное значение по умолчанию. Есть несколько способов установить другое локальное значение для конкретного буфера:

  1. Вручную с :setlocal foldmethod=marker
  2. Для определенного типа файла (например, файлы Java):: :autocmd FileType java setlocal foldmethod=marker (или в ~/.vim/after/ftplugin/java.vim)
  3. Для конкретного файла (ов):: :autocmd BufRead /path/to/file setlocal foldmethod=marker
  4. Внутри самого файла через моделину (так как вы все равно должны добавить маркеры, я бы предпочел это):

/* vim: set fdm=manual : */

Там все еще может быть только один раз методом внутри одного окна. Если вы хотите использовать разные стратегии, вам нужно выбрать более гибкий метод (например, expr) и повторно внедрить там "другие" методы (например, сделав так, чтобы ваш 'foldexpr' учитывал отступ). Или вы используете два разделения окна для одного и того же буфера и устанавливаете разные методы сгиба для каждого разделения.

Поскольку это, вероятно, не то, что вы хотите услышать, вы можете взломать что-нибудь вместе с :autocmd CursorMoved который переключает метод сгиба на основе текущей строки:

" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .