vimでモードラインが機能しない


19

私は.aliasesbashとzsh と呼ばれるファイルを持っています、私はこの行を置きます

# vim: set filetype=bash: 

しかし、私が作るなら

: echo &ft

私は得る conf


ここですべてを試しましたが、何も機能しませんでした。私は18年間vimを使用しています。モードラインを機能させることができなかったのはこれが初めてです。
ブルーノブロノスキー

理解した。以下に答えてください。superuser.com/a/1174296/3376
ブルーノブロノスキー

回答:


28

うまくいくはずです。自分でそのラインを試してみましたが、うまくいきました。「modeline」オプションが「nomodeline」に設定されている可能性があります。これを実行してみて、得られるものを確認してください。

:verbose set modeline?

これにより、「modeline」オプションの値と、デフォルトでない場合は最後に設定された場所がわかります。

一部のLinuxディストリビューションでは、「modeline」のセキュリティ問題は以前から修正されていますが、セキュリティ対策として/ etc / vimrcまたは/ usr / share / vim / vimrcに「nomodeline」を設定しています。


modeline最終セット〜/ .vimrc
juanpablo

セキュリティのため、モードラインを変更して〜/ .vimrc au BufNewFile、BufRead。* aliases set filetype = sh
juanpablo

それらのすべてが長い間修正されていない。github.com/numirias/security/blob/master/doc/...
duckbrain

@duckbrainデータ自体の中のデータを参照するコードによって実行される埋め込み命令を含めることができる限り、すべてのセキュリティ問題が修正されたことを保証することは根本的に不可能です。このため、キースボスティックのnviのドキュメントではmodelines、このオプションは未実装であり、実装されることはないと常に述べられています。これは、PDF、Word、Excel、&c&c&cで実行するファイル埋め込みコマンドまたはマクロ命令に起因するすべてのセキュリティバグと同じです。
tchrist

14

この他の回答では、完全なデバッグチェックリストについて説明します

ドキュメント完全に真実ではないため私は本当にこれに困惑していました。

バージョン8(およびそれ以前)setでは、モードラインでこの単語を使用できないことがわかりました。ドキュメントでは、「2番目の形式」が存在すると説明されて/* vim: set ai tw=75: */いますが、これは機能しません。「最初のフォーム」を使用する必要があります// vim: ai tw=75

注:これらの種類のコメントインジケーターのいずれかを使用できます。またはまったくありません。


これは、すべてのvimインストールに必ずしも当てはまるわけではありません。このフォームはset、vim 8.0(7.4ではありません)で正常に動作します。また、2番目の形式// 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に設定されている場合)
-kynan

Gentooは、vimでのmodelines処理に伴うすべての脆弱性により、システム全体set nomodeline/etc/vimrc影響を及ぼします。
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で機能します。ありがとうございます!
カリガリ


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.vim以下からvim-commonDebianベースのディストリビューション無効にし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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.