GNU/Linux >> Linux の 問題 >  >> Linux

Modelineを使用してVimでファイル固有の設定を変更する方法

プラグインは間違いなくVimの最大の強みの1つですが、他にもいくつかの機能があり、今日のLinuxユーザーが利用できる最も強力で機能豊富なテキストエディタ/IDEの1つになっています。これらの機能の1つは、ファイル固有の設定変更を行う機能です。この機能には、エディターのModeline機能を使用してアクセスできます。

この記事では、わかりやすい例を使用してVimのModeline機能を使用する方法について説明します。

But before we start doing that, it's worth mentioning that all the examples, commands, and instructions mentioned in this tutorial have been tested on Ubuntu 16.04, and the Vim version we've used is 7.4.

VIMモデリン

使用法

すでに述べたように、VimのModeline機能を使用すると、ファイル固有の変更を加えることができます。たとえば、プロジェクトの特定のファイルで使用されているすべてのタブをスペースに置き換え、他のすべてのファイルがこの変更の影響を受けないことを確認するとします。これは、Modelineがやりたいことを支援する理想的なユースケースです。

したがって、できることは、問題のファイルの最初または最後に次の行を置くことができるということです。

# vim: set expandtab:

Linuxマシンでユースケースをテストするために前述の演習を実行しようとすると、期待どおりに機能しない可能性が高くなります。その場合は、心配しないでください。Modeline機能を最初にアクティブ化する必要がある場合もあります(セキュリティ上の理由から、Debian、Ubuntu、Gentoo、OSXなどのシステムではデフォルトで無効になっています)。

この機能を有効にするには、(ホームディレクトリにある).vimrcファイルを開き、次の行を追加します。

set modeline

これで、タブに入ってファイルを保存するたびに( Expandtab modelineコマンドが入力された場合)、タブは自動的に空白に変換されます。

別のユースケースを考えてみましょう。 Vimのデフォルトのタブスペースが4に設定されているが、特定のファイルの場合は8に増やしたいとします。このためには、ファイルの最初または最後に次の行を追加する必要があります。

// vim: noai:ts=8:

タブを入力してみると、タブがカバーするスペースの数が8になることがわかります。

これらのモードラインコマンドは、ファイルの上部または下部の近くに入力する必要があると私が言っていることに気付いたかもしれません。これがなぜそうなのか疑問に思っているのなら、その理由は、機能がこのように設計されているためです。次の行(Vimの公式ドキュメントから抜粋)は、これをより明確にする必要があります:

"モードラインはファイルのどこにあってもかまいません。最初または最後の数行にある必要があります。vimがモードラインをチェックする正確な場所は、modelinesによって制御されます。 変数;参照:ヘルプモードライン 。デフォルトでは、5行に設定されています 。"

そして、これが:help modelines コマンド(上記の行で参照)は次のように述べています:

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.

modelineコマンドをデフォルトの5行(下または上から)の範囲を超えて配置すると、タブスペースがVimのデフォルト(私の場合は4スペース)に戻ることがわかります。

ただし、必要に応じて、.vimrcファイルで次のコマンドを使用してこの動作を変更できます。

set modelines=[new-value]

たとえば、値を5から10に増やしました。

set modelines=10

これは、modelineコマンドをファイルの最初または最後の10行の間のどこにでも配置できることを意味します。

次に進むと、ファイルの編集中にいつでも次のように入力して(Vimエディターをコマンドモードで)、現在のモードライン関連の設定と最後に設定された場所を確認できます。

:verbose set modeline? modelines?

たとえば、私の場合、上記のコマンドは次の出力を生成しました:

 modeline
Last set from ~/.vimrc
modelines=10
Last set from ~/.vimrc

VimのModeline機能について知っておく必要のある重要なポイントを次に示します。

  • この機能は、互換性のない(Vi互換ではない)モードで実行されているVimに対してデフォルトで有効になっていますが、Vimのいくつかの注目すべきディストリビューションでは、セキュリティのためにシステムvimrcでこのオプションが無効になっています。
  • rootとして編集する場合、この機能はデフォルトで無効になっています(「sudo」を使用してファイルを開いた場合、問題はありません。機能は機能します)。
  • set'を使用 、モードラインはバックスラッシュに従わない最初のコロンで終了します。 'set'なし 、オプションの後にテキストを続けることはできません。例: / * vim:noai:ts =4:sw =4 * / 無効なモードラインです。

セキュリティ上の懸念

残念ながら、VimのModeline機能を使用してセキュリティを侵害することができます。実際、シェルコマンドの挿入、任意のコマンドの実行、不正アクセスなど、セキュリティに関連する複数のModelineの問題が過去に報告されています。同意しました。これらのほとんどは古く、今では修正されているはずですが、Modeline機能がハッカーによって悪用される可能性があるという考えを示しています。

結論

ModelineはVimエディターの高度な機能かもしれませんが、理解するのはそれほど難しくありません。少し学習曲線が必要であることは間違いありませんが、この機能がどれほど有用であるかを考えると、それほど多くのことを求める必要はありません。もちろん、セキュリティ上の懸念もあります。つまり、この機能を有効にして使用する前に、オプションを検討する必要があります。

Modeline機能を使用したことがありますか?あなたの経験はどうでしたか?以下のコメントで私たち(およびHowtoForgeコミュニティ全体)と共有してください。


Linux
  1. 証明書を使用してLdapsearchをSlesoverTlsで動作させる方法は?

  2. perl-support.vim プラグインを使用して Vim を Perl IDE として作成する

  3. bash-support プラグインを使用して Vim を Bash-IDE として作成する

  1. Vim/Viで変更を元に戻したりやり直したりする方法

  2. チュートリアル:c.vim プラグインを使用して Vim を C/C++ IDE として作成する

  3. パイプを使用してvimでファイルを開く方法

  1. Linux VPSでCS:GOサーバーを作成する方法

  2. Vim/Viで元に戻す方法とやり直す方法

  3. Vim/Viで行を削除する方法