modeline не працює у vim


19

У мене файл, який називається .aliasesbash і 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. * псевдоніми встановити
файли

Не всі вони давно виправлені. github.com/numirias/security/blob/master/doc/…
качка

@duckbrain Принципово неможливо гарантувати, що всі проблеми з безпекою колись були виправлені, доки колись можливо включити вбудовані інструкції, що виконуються кодом, переглядаючи дані в самих даних. Ось чому в документації на nvi Кіта Бостіка завжди говорилося про modelinesте, що варіант не застосовується і що його ніколи не буде. Це так само, як і всі помилки безпеки, що виникають із вбудованих файлів команд чи макро інструкцій для запуску в 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: встановити тип файлу = sh"

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

Десь у моєму конфлікті може виникнути побічний ефект, але несумісний синтаксис моделей - це єдиний, який працює як очікується для мене.


1

/usr/share/vim/vim80/debian.vimз дистрибутиваvim-common на основі Debianmodeline за замовчуванням вимикається .

" 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. Встановлення плагіна безпечних модулів.
  3. Білі списки лише використовуваних моделей.

У цьому випадку команди з білого списку за замовчуванням включають filetype.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.