80

私の Vim エディターは、PHP ファイル ( vim file.php)、HTML ファイル ( vim file.html) などを自動的に強調表示します。

しかし、次のように入力vim fileして、その中に Bash スクリプトを記述しても、強調表示されません。

Vim に Bash スクリプトとして強調表示するように指示するにはどうすればよいですか?

ファイルの先頭から入力を開始#!/bin/bashしましたが、機能しません。

4

12 に答える 12

93

シェルスクリプトに.sh拡張子を正しく付けていますか? Vim の自動構文選択は、ほぼ完全にファイル名 (拡張子) の検出に基づいています。ファイルに構文が設定されていない (または構文が間違っている) 場合、特定の言語でスクリプトを入力し始めたからといって、Vim は自動的に正しい構文に変更されません。

一時的な回避策として、このコマンド:set syn=shはシェル スクリプトの構文の強調表示をオンにします。

于 2010-04-05T02:53:01.843 に答える
44

これまでの回答は正しいので、拡張子 ( など.sh) またはシェバン行 ( など#!/bin/bash) を使用してファイルの種類を識別できます。これらのいずれも持っていない場合でも、ファイルの上部または下部にあるモードライン コメントを使用して、ファイルの種類を手動で指定できます。

たとえば、拡張子のないスクリプトをシェル スクリプトとして識別したい場合は、次のコメントをファイルの先頭に追加できます。

# vim: set filetype=sh :

また

# vim: filetype=sh

これにより、ファイルをシェルスクリプトとして扱うようにvimに指示されます。(モードラインで他の設定を行うこともできます。詳しくは vim タイプ:help modelineを参照してください。)

于 2012-08-31T22:58:09.647 に答える
24

実際、構文の強調表示は vi ではなく vim の機能です。vimコマンドを試してから実行してください

:syntax on.

于 2015-02-10T10:01:19.150 に答える
22

bashPOSIXシェルではなく、構文を強調表示する方法を具体的に探して、この回答にたどり着きました。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私が見つけなければならなかったマニュアルページです。これと、他のフレーバーのシェルの強調表示をトリガーする方法について説明します。

于 2017-03-01T22:29:49.883 に答える
17

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のデフォルトルールを上書きします。

于 2010-04-05T08:02:22.450 に答える
0

vim は、デフォルトですでに多くのファイル タイプを認識しています。それらのほとんどはファイル拡張子によって機能しますが、このような場合、vim はファイルの内容も分析して正しいタイプを推測します。

.bashrcvim は、 、 などの特定のファイル名のファイルタイプを.tcshrc自動的に設定します。ただし、拡張子を持つファイルは、.shcsh、ksh、または bash スクリプトとして認識されます。これが正確にどのような種類のスクリプトであるかを判断するために、vim はファイルの最初の行を読み取って #! ライン。

最初の行に単語が含まれている場合bash、ファイルは bash スクリプトとして識別されます。通常#!/bin/bash、スクリプトが直接実行されることを意図しているかどうかがわかりますが、単純なものを使用するシェル構成ファイルの場合# bashも同様に機能します。

詳細を見たい場合は、 で実装されてい$VIMRUNTIME/filetype.vimます。

于 2011-09-16T23:36:45.577 に答える
0

おそらく、新しいファイルで構文を強調表示する最も簡単な方法は、シバン行を書いた後に再読み込みすることです。シンプル:w :eにファイルを書き出してリロードし、記述したばかりのシバン行を解釈して、適切な構文の強調表示を提供します。

于 2014-01-24T10:32:22.947 に答える
-1

新しいファイルを作成すると、ファイル名の検出のみが機能します。#!/bin/bash新しいバッファを作成した後に入力した場合、コンテンツ検出 ( ) は適用されません。

賢明なことは:set ft=bash、最初に実行するだけで、次に編集するときに#!/bin/bash、適切なファイルタイプが自動的に設定されます。

于 2012-08-31T23:00:26.267 に答える