моделин не работает в 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.