私の Vim エディターは、PHP ファイル ( vim file.php
)、HTML ファイル ( vim file.html
) などを自動的に強調表示します。
しかし、次のように入力vim file
して、その中に Bash スクリプトを記述しても、強調表示されません。
Vim に Bash スクリプトとして強調表示するように指示するにはどうすればよいですか?
ファイルの先頭から入力を開始#!/bin/bash
しましたが、機能しません。
私の Vim エディターは、PHP ファイル ( vim file.php
)、HTML ファイル ( vim file.html
) などを自動的に強調表示します。
しかし、次のように入力vim file
して、その中に Bash スクリプトを記述しても、強調表示されません。
Vim に Bash スクリプトとして強調表示するように指示するにはどうすればよいですか?
ファイルの先頭から入力を開始#!/bin/bash
しましたが、機能しません。
シェルスクリプトに.sh
拡張子を正しく付けていますか? Vim の自動構文選択は、ほぼ完全にファイル名 (拡張子) の検出に基づいています。ファイルに構文が設定されていない (または構文が間違っている) 場合、特定の言語でスクリプトを入力し始めたからといって、Vim は自動的に正しい構文に変更されません。
一時的な回避策として、このコマンド:set syn=sh
はシェル スクリプトの構文の強調表示をオンにします。
これまでの回答は正しいので、拡張子 ( など.sh
) またはシェバン行 ( など#!/bin/bash
) を使用してファイルの種類を識別できます。これらのいずれも持っていない場合でも、ファイルの上部または下部にあるモードライン コメントを使用して、ファイルの種類を手動で指定できます。
たとえば、拡張子のないスクリプトをシェル スクリプトとして識別したい場合は、次のコメントをファイルの先頭に追加できます。
# vim: set filetype=sh :
また
# vim: filetype=sh
これにより、ファイルをシェルスクリプトとして扱うようにvimに指示されます。(モードラインで他の設定を行うこともできます。詳しくは vim タイプ:help modeline
を参照してください。)
実際、構文の強調表示は vi ではなく vim の機能です。vimコマンドを試してから実行してください
:syntax on
.
bash
POSIXシェルではなく、構文を強調表示する方法を具体的に探して、この回答にたどり着きました。set ft=sh
(または同等の) を実行するだけで、ファイルが POSIX シェルで強調表示され、有効な構文がbash
赤で強調表示されたままになります。bash の強調表示を取得するには:
" Set a variable on the buffer that tells the sh syntax highlighter
" that this is bash:
let b:is_bash = 1
" Set the filetype to sh
set ft=sh
ft
がすでにsh
である場合でも、set
コマンドが必要であることに注意してください。それ以外の場合、let
はすぐには有効になりません。
変数をグローバルにすることで、これをグローバルなデフォルトにすることができますlet g:is_bash = 1
。
:help ft-sh-syntax
私が見つけなければならなかったマニュアルページです。これと、他のフレーバーのシェルの強調表示をトリガーする方法について説明します。
Vimは、その内容を検査することでファイルタイプを検出することもできます(たとえば、最初の行にbashシバンが含まれている場合など)。filetype.txt
ヘルプファイルからの引用は次のとおりです。
ファイルの内容を調べることによってのみファイルタイプを検出できる場合
ユーザーランタイムディレクトリを作成します。通常、「runtimepath」オプションの最初の項目を使用します。Unixの例:
:!mkdir ~/.vim
これを行うためのvimスクリプトファイルを作成します。例:
if did_filetype() " filetype already set..
finish " ..don't do these checks
endif
if getline(1) =~ '^#!.*\<mine\>'
setfiletype mine
elseif getline(1) =~? '\<drawing\>'
setfiletype drawing
endif
その他の例については、$ VIMRUNTIME/scripts.vimを参照してください。このファイルをユーザーランタイムディレクトリに「scripts.vim」として書き込みます。たとえば、Unixの場合:
:w ~/.vim/scripts.vim
検出はすぐに機能し、Vimを再起動する必要はありません。
スクリプト.vimは、デフォルトでファイルタイプをチェックする前に読み込まれます。つまり、ルールは$ VIMRUNTIME/scripts.vimのデフォルトルールを上書きします。
vim は、デフォルトですでに多くのファイル タイプを認識しています。それらのほとんどはファイル拡張子によって機能しますが、このような場合、vim はファイルの内容も分析して正しいタイプを推測します。
.bashrc
vim は、 、 などの特定のファイル名のファイルタイプを.tcshrc
自動的に設定します。ただし、拡張子を持つファイルは、.sh
csh、ksh、または bash スクリプトとして認識されます。これが正確にどのような種類のスクリプトであるかを判断するために、vim はファイルの最初の行を読み取って #! ライン。
最初の行に単語が含まれている場合bash
、ファイルは bash スクリプトとして識別されます。通常#!/bin/bash
、スクリプトが直接実行されることを意図しているかどうかがわかりますが、単純なものを使用するシェル構成ファイルの場合# bash
も同様に機能します。
詳細を見たい場合は、 で実装されてい$VIMRUNTIME/filetype.vim
ます。
おそらく、新しいファイルで構文を強調表示する最も簡単な方法は、シバン行を書いた後に再読み込みすることです。シンプル:w
:e
にファイルを書き出してリロードし、記述したばかりのシバン行を解釈して、適切な構文の強調表示を提供します。
新しいファイルを作成すると、ファイル名の検出のみが機能します。#!/bin/bash
新しいバッファを作成した後に入力した場合、コンテンツ検出 ( ) は適用されません。
賢明なことは:set ft=bash
、最初に実行するだけで、次に編集するときに#!/bin/bash
、適切なファイルタイプが自動的に設定されます。