Vimエディターは、PHPファイル(_vim file.php
_)、HTMLファイル(_vim file.html
_)など)を自動的に強調表示します。
ただし、_vim file
_と入力すると、その中にBashスクリプトが書き込まれますが、強調表示されません。
VimにBashスクリプトとして強調表示するように指示するにはどうすればよいですか?
ファイルの先頭で_#!/bin/bash
_と入力し始めましたが、機能しません。
シェルスクリプトに.sh
拡張子? Vimの自動構文選択は、ほぼ完全にファイル名(拡張子)の検出に基づいています。ファイルに構文が設定されていない(または間違った構文である)場合、特定の言語でスクリプトを入力し始めたからといって、Vimは正しい構文に自動的に変更しません。
一時的な回避策として、コマンド:set syn=sh
は、シェルスクリプトの構文の強調表示をオンにします。
これまでの答えは正しいので、拡張機能を使用できます(.sh
)またはShebangライン(#!/bin/bash
)ファイルタイプを識別します。それらのいずれかがない場合でも、ファイルの上部または下部にあるモードラインコメントを使用して、ファイルタイプを手動で指定できます。
たとえば、拡張子のないスクリプトをシェルスクリプトとして識別したい場合は、このコメントをファイルの先頭に追加できます。
# vim: set filetype=sh :
または
# vim: filetype=sh
これにより、vimはファイルをシェルスクリプトとして扱うようになります。 (モードラインで他の設定もできます。vimに:help modeline
詳細については。)
実際、構文の強調表示はviではなくvimの機能です。 vimコマンドを使用してみてください
:syntax on
。
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のデフォルトルールをオーバーライドします。
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
は私が見つけなければならなかったマニュアルページです。これと、シェルの他のフレーバーの強調表示をトリガーする方法について説明します。
vimは一番上のコメントで検出できます
ファイルの先頭でこの行を試してください
#!/bin/sh
ファイルの先頭にシバンを追加したら、保存してリロードします(例::w|e
)および構文の色分けが有効になります。
Vimの一貫性のない構文ハイライトbashファイル も参照してください。受け入れられた答えも役立ちます。
スクリプトを開く前にファイルタイプをすでに知っている場合、または一般的な拡張子のない新しいスクリプトを作成している場合は、次のようにコマンドラインでvimに渡すことができます。
vim -c 'setfiletype sh' path/to/script
vim -c 'setfiletype python' path/to/script
おそらく、新しいファイルの構文を強調表示する最も簡単な方法は、Shebang行を書き込んだ後にファイルをリロードすることです。シンプルな :w
:e
はファイルを書き出し、リロードし、記述したシェバン行を解釈して、適切な構文強調表示を提供します。
vimはデフォルトで多くのファイルタイプをすでに認識しています。それらのほとんどはファイル拡張子によって機能しますが、このような場合、vimはファイルの内容を分析して正しいタイプを推測します。
vimは、.bashrc
、.tcshrc
などの特定のファイル名のファイルタイプを自動的に設定します。ただし、.sh
拡張子を持つファイルは、csh、ksh、またはbashスクリプトとして認識されます。これが正確にどの種類のスクリプトであるかを判断するために、vimはファイルの最初の行を読み取って#!を調べます。ライン。
最初の行にWord bash
が含まれている場合、ファイルはbashスクリプトとして識別されます。通常、スクリプトを直接実行する場合は#!/bin/bash
が表示されますが、単純な# bash
を使用するシェル構成ファイルでも同様に機能します。
詳細を確認したい場合は、$VIMRUNTIME/filetype.vim
に実装されています。