web-dev-qa-db-ja.com

VimでBashスクリプトを強調表示する方法は?

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

ただし、_vim file_と入力すると、その中にBashスクリプトが書き込まれますが、強調表示されません。

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

ファイルの先頭で_#!/bin/bash_と入力し始めましたが、機能しません。

69

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

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

77
Mark Rushakoff

これまでの答えは正しいので、拡張機能を使用できます(.sh)またはShebangライン(#!/bin/bash)ファイルタイプを識別します。それらのいずれかがない場合でも、ファイルの上部または下部にあるモードラインコメントを使用して、ファイルタイプを手動で指定できます。

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

# vim: set filetype=sh :

または

# vim: filetype=sh

これにより、vimはファイルをシェルスクリプトとして扱うようになります。 (モードラインで他の設定もできます。vimに:help modeline詳細については。)

30
bryant

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

:syntax on

18
Gaurav Khare

Vimは、その内容を検査することでファイルタイプを検出することもできます(たとえば、最初の行にbash Shebangが含まれている場合など)。ここに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を再起動する必要はありません。

Scripts.vimは、デフォルトでファイルタイプがチェックされる前にロードされます。つまり、ルールが$ VIMRUNTIME/scripts.vimのデフォルトルールをオーバーライドします。

14
Matteo Riva

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

12
Thanatos

vimは一番上のコメントで検出できます

ファイルの先頭でこの行を試してください

#!/bin/sh
7
Arun Karikalan

ファイルの先頭にシバンを追加したら、保存してリロードします(例::w|e)および構文の色分けが有効になります。

Vimの一貫性のない構文ハイライトbashファイル も参照してください。受け入れられた答えも役立ちます。

2
dash-tom-bang

スクリプトを開く前にファイルタイプをすでに知っている場合、または一般的な拡張子のない新しいスクリプトを作成している場合は、次のようにコマンドラインでvimに渡すことができます。

vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
0
Edge-Case

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

0
cmaster

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

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

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

詳細を確認したい場合は、$VIMRUNTIME/filetype.vimに実装されています。

0
raimue