моделин не работает в vim


19

У меня есть файл .aliasesдля bash и zsh, я поставил эту строку

# vim: set filetype=bash: 

но если я сделаю

: echo &ft

я получил conf


Я здесь все перепробовал и ничего не получилось. Я использую Vim в течение 18 лет. Это первый раз, когда мне не удалось заставить работать моделин.
— Бруно Броноски

Догадаться. Ответ ниже. superuser.com/a/1174296/3376
— Бруно Броноски

Ответы:


28

Это должно работать. Я попробовал эту линию сам, и это сработало. Я мог бы быть, что ваша опция 'modeline' была установлена ​​на 'nomodeline'. Попробуйте выполнить это и посмотрите, что вы получите.

:verbose set modeline?

Это скажет вам значение параметра 'modeline' и, если не значение по умолчанию, где он был установлен в последний раз.

Некоторые дистрибутивы Linux устанавливают nomodeline в / etc / vimrc или / usr / share / vim / vimrc в качестве меры безопасности, хотя проблемы безопасности с modeline уже давно устранены.


modeline Последний сет из ~ / .vimrc
— juanpablo

в целях безопасности я изменяю модельную линию, чтобы добавить ее в мой ~ / .vimrc au BufNewFile, BufRead. * aliases set filetype = sh
— juanpablo

Не все из них были давно исправлены. github.com/numirias/security/blob/master/doc/…
— утиный мозг

@duckbrain Принципиально невозможно гарантировать, что все проблемы безопасности когда-либо были устранены, если есть возможность включать встроенные инструкции, которые должны выполняться кодом, который просматривает данные в самих данных. Поэтому документация Кит Бостик в NVI всегда говорил о modelinesтом , что вариант Unimplemented и что он никогда не будет. Это так же, как все ошибки безопасности, возникающие из встроенных в файл команд или макрокоманд для запуска в PDF, Word, Excel, & c & c & c.
— tchrist

14

Я опишу полный контрольный список отладки в этом другом ответе .

Я был очень озадачен на это потому , что документация является не совсем верно.

Оказывается, в версии 8 (а может и раньше) вы не можете использовать это слово setв своей моделине. Документация описывает «вторую форму» как существующую, /* vim: set ai tw=75: */но это не работает. Вы должны использовать «первую форму»// vim: ai tw=75

Примечание. Вы можете использовать любой из этих индикаторов комментариев. Или нет вообще.


Это не обязательно верно для всех установок vim. Форма с setотлично работает для меня на Vim 8.0 (хотя не на 7,4). Также стоит отметить, что со второй формой // vim: ai tw=75не может быть никаких других символов в конце строки, иначе vim будет жаловаться и игнорировать моделину.
— Джош

Об этом следует обязательно сообщать как об ошибке (или как устаревшую документацию). Я воспроизвел на VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48) Inklusive der Korrekturen: 1-1689 Extra-Patches: 8.0.0056 Verändert von pkg-vim-maintainers@lists.alioth.debian.org Übersetzt von pkg-vim-maintainers@lists.alioth.debian.org Riesige Version mit GTK2-GNOME GUI. (Последние строки означают изменено ... , составлено ... , огромная версия ... ).
— LittleByBlue

Я попытался обратиться к нему в списке рассылки. Они не согласны.
— Бруно Броноски

@BrunoBronosky у вас есть ссылка на почтовую ветку? Хотел бы прочитать их рассуждения.
— серый волк

Вот ссылка на ветку. groups.google.com/d/msg/vim_dev/aFh3X0etB7c/zl0Vi-MuFQAJ Я действительно не нашел времени, чтобы понять их аргументацию.
— Бруно Броноски

11

set modelines=1 (или любое значение, отличное от 0) в моем ~ / .vimrc заставило его работать на меня.


5
Это не имеет никакого эффекта, если modelineоно также не установлено (это по умолчанию в Vim, если вы не root)
— kynan

Gentoo имеет общесистемный set nomodelineв /etc/vimrcсвязи с все уязвимости с ModeLines обработки в Vim.
— MattBianco

В моем случае мне также пришлось установить modelinesненулевое значение. В справке говорится, что по умолчанию установлено значение 5, поэтому я установил его, и это помогло мне. В штатах говорится, чтоIf 'modeline' is on 'modelines' gives the number of lines that is checked for set commands. If 'modeline' is off or 'modelines' is zero no lines are checked.
— Бен

9

в ~ / .vimrc вам нужно установить следующее:

set nocompatible 
filetype plugin on
set modeline 

Эти строки работают в Debian 9. Спасибо!
— Caligari

7

~/.vimrcНа моем компьютере с Funtoo Linux добавили только следующее :

set modeline

Не работает в Mac!
— Шува

1

Так как это похоже на поиски:

У меня такая же проблема:

# vim: set filetype=sh:

не работает, в результате чего ft = conf также. без моделин в моем ~ / .bash_alias, ft пусто, так что что-то меняется.

пока

# vim: filetype=sh:

работал. последнее присутствие ":" кажется несущественным.

Я на OSX с вареной версией Vim8, для записей.

это странно, потому что от моделина помогают оба

[text]{white}{vi:|vim:|ex:}[white]{options}

и

[text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]

кажется, поддерживается.

Выход из

verbose set ft?

с "vim: filetype = sh" является

filetype=sh
      Last set from modeline

без моделин:

filetype=

с помощью "vim: set filetype = sh"

filetype=conf
     Last set from /usr/local/Cellar/vim/8.0.1350/share/vim/vim80/filetype.vim

Где-то в моем conf может быть побочный эффект, но не совместимый синтаксис моделин - единственный, который работает, как и ожидалось.


1

/usr/share/vim/vim80/debian.vimfrom vim-commonв дистрибутивах на основе Debian отключается modelineпо умолчанию.

" modelines have historically been a source of security/resource
" vulnerabilities -- disable by default, even when 'nocompatible' is set
set nomodeline

Вы должны включить modelineявно в вашем .vimrcили ~/.vim/vimrcфайле.

set modeline

0

Скорее всего, это связано с отключением моделинов.

Я работаю над этим:

  1. как правило, отключайте его, чтобы избежать проблем с безопасностью.
  2. Установка плагина securemodelines .
  3. В белый список входят только те модели, которые я использую.

В этом случае команды по умолчанию включены в белый список filetype.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.