テキストエディターは、すべてのプログラマーにとって主要なツールです。そのため、彼の選択の問題が激しい議論の原因になります。 Unixは伝統的に、2つの長年のお気に入りである
Emacsと
Vi 、およびそれらの最新バージョンの
GNU Emacsと
Vimと密接に関連しています。 これらのエディターはテキストを編集するための非常に異なるアプローチを持っていますが、同時にそれらは力において同等です。
私は
Vimに属しているので、このエディターの尽きることのない機能、および組み込み機能を拡張するために
Vimから直接呼び出されるコマンドラインツールについてさらに説明します。 以下で説明する原則のいくつかは
Emacsに適用されますが、
Nanoなどの単純なエディターには適用されません。
Vimのプログラミング機能は本当に無数にあるため、これは非常に表面的な概要になりますが、それでもかなり長いことがわかります。
Vim :ヘルプチームは、初心者の間では高品質で有用な情報源として知られているため、無視しないでください。
ファイルタイプの定義
Vimには、その動作に影響する多くの設定があります。 たとえば、ダウンロードするファイルの種類に応じて、コードの強調表示を簡単にカスタマイズできます。 したがって、特に、使用するプログラミング言語の標準に対応するインデントスタイルを設定できます。 この設定は、
.vimrcファイルの最初の1つに配置するのが最適です。
if has("autocmd") filetype on filetype indent on filetype plugin on endif
構文の強調表示
16色の端末で作業している場合でも、
.vimrcファイルのバックライトを自由にオンにしてください。
syntax on
標準の16色ターミナルのカラースキームは外見上はあまり良くありませんが、正しい構文ファイルを選択すると、割り当てられたタスクを解決します。 配色は多数あるため、簡単にカスタマイズできます。256色の端末または
gVimを使用すると、さらに多くのオプションを使用できます。 適切な構文ファイルは、エラーを明るい赤の背景色で強調表示します。
行番号
従来のIDEで行番号付けに慣れている場合は、次のように入力して有効にすることができます。
set number
Vimが 7.3より古くなく、絶対にではなく現在の行に番号を付けたい場合は、このトリックを試すことができます。
set relativenumber
タグファイル
Vimは、
ctagsユーティリティによって生成されたデータと非常にうまく機能します。 これにより、プロジェクト内で必要な識別子のすべてのオカレンスをすばやく検索したり、別のファイルにある場合でも、コードで使用された場所から変数宣言に直接移動できます。 多くのファイルを含む大規模なCプロジェクトの場合、無駄な時間を大幅に節約できます。これは、
VimがメインストリームIDEにもたらす最も近い方法です。
プロジェクトのルートディレクトリでサポートされている言語のいずれかで
:!Ctags -Rを実行すると、プロジェクト内の識別子の場所への定義とリンクを含むタグファイルを取得できます。 タグファイルの準備ができたら、次のようにプロジェクトでタグの使用を検索できます。
:tag someClass
:tnおよび
:tpコマンドを使用すると、プロジェクト全体でタグエントリ間を移動できます。 組み込みのタグメカニズムは、最も使用される機能のほとんどをカバーしますが、タグのリストを含むウィンドウなど、より洗練された機能が必要な場合は、非常に人気のあるタグリストプラグインをインストールできます。 Tim Popeの
Unimpairedプラグインには、いくつかの重要なチーム
リマップも含まれています。
外部プログラムの呼び出し
Vimセッションから外部コマンドを呼び出すには、主に2つの方法があります。
- :!<コマンド>! -プログラム出力をバッファに保存する必要がある場合に使用
- :shell -shellをVimの子として実行します。 インタラクティブなコマンド実行に適しています。
3番目の方法は、ここでは詳しく説明しませんが、
Conqueなどのプラグインを使用して、
Vimバッファーでシェルを直接エミュレートします。 私自身、実際に試してみましたが、プラグインは使用できないように思われました。 おそらく、それは単に間違った著者の意図にすぎ
ません (「
設計ではなく設計を支援する 」を参照)。
Vimはコンソールでもオペレーティングシステムでもありません。
Vim内でコンソールを実行したり、デバッガを制御したりすることはほとんどありません。 使用モデルは異なります。コマンドラインコンポーネントとして、またはIDEの一部として使用します。
リントのようなプログラムと構文チェック
外部プログラム(たとえば
perl -c
、
gcc
)を呼び出すことによる構文チェックまたはコンパイルは、
!:Commandsを使用してエディターから開始できます。 Perlファイルが編集されている場合、次のコマンドを実行できます。
:!perl -c % /home/tom/project/test.pl syntax OK Press Enter or type command to continue
文字「%」は、現在のバッファにロードされるファイルのワイルドカード文字です。 結果は、入力されたコマンドラインの下に、コマンドのテキスト出力(存在する場合)です。 外部プログラムを絶えず呼び出す必要がある場合は、コマンドとして、または
.vimrcファイルのキーの組み合わせとしてマップすることをお
勧めします。 以下にコマンドを定義します
:PerlLint 、通常モードから
\ lで呼び出されます:
command PerlLint !perl -c % nnoremap <leader>l :PerlLint<CR>
多くの言語では、組み込みの
Vimクイックリストウィンドウを使用して同じことを行う別の方法があります。
Vimの読み取り可能な出力を形成するモジュールへの呼び出しを含む、ファイルタイプの
makeprg設定を設定します。
:set makeprg=perl\ -c\ -MVi::QuickFix\ % :set errorformat+=%m\ at\ %f\ line\ %l\. :set errorformat+=%m\ at\ %f\ line\ %l
まず、CPANから目的のモジュールをインストールする必要があります。 完了したら、
:makeコマンドを入力して、ファイルの構文を確認できます。 エラーが見つかった場合は、クイックリスト(
: copen)ウィンドウを開き、説明を確認し、
:cnおよび
:cpを使用してエラー間を移動でき
ます 。
このようなトリックは、gcc出力でも同様に機能し、実際、ファイル名、行番号、エラーメッセージを使用して作業結果を操作する構文チェックプログラムでも機能します。 同様に、PHPなどのWeb指向言語、およびJavaScript用のJSLintを使用できます。 同じ目的のために設計された優れた
Syntasticプラグインもあります。
他のコマンドの出力の読み取り
コマンドを呼び出して、その出力を現在のバッファーに直接送るには、次を使用します
:r! 。 たとえば、ディレクトリの内容のクイックリストを取得するには、次のように入力します。
:r!ls
もちろん、コマンドはこれらに限定されません。
:rを使用すると、公開鍵やテンプレートテキストなどの任意のファイルを読み取り、読み取ることができます。
:r ~/.ssh/id_rsa.pub :r ~/dev/perl/boilerplate/copyright.pl
他のコマンドを介した出力のフィルタリング
ヘッダーをより広く見ると、外部コマンドを使用してバッファー内のテキストをフィルター処理することについて説明します。
Vimのビジュアルモードは列分割データの操作に最適なので、多くの場合、
column 、
cut 、
sort、または
awkコマンドを使用するのが理にかなっています。
たとえば、次のコマンドを使用して、2番目の列でファイル全体をソートできます。
:%!sort -k2 -r
選択したテキストの3番目の列のみを表示できます。行はパターン「/ vim /」に一致します。
:'<,'>!awk '/vim/ {print $3}'
キーワードを列の1〜10行に配置できます。
:1,10!column -t
Vimでは、この方法で任意のテキストフィルターまたはコマンドを適用できます。これにより、テキストエディターの範囲が大幅に拡大します。 さらに、
Vimバッファーはテキストストリームと見なされ、すべての従来のユーティリティはこの言語で簡単に通信できます。
組み込みの代替
並べ替えや検索などの最も一般的な操作のために、
Vimには組み込みメソッド
:sortおよび
:grepがあります。
Vimが Windowsで使用される場合に便利ですが、コンソールコールの適応性に近いものではありません。
ファイル比較
Vimには
vimdiff比較
ツールがあり、ファイルのさまざまなバージョンの違いを確認できるだけでなく、3者間マージによって競合を解決し、テキストの違いをコマンド
diffputおよび
:diffgetで置き換えることができます。
Vimdiffは、次のように少なくとも2つのファイルのコマンドラインから呼び出されます。
$ vimdiff file-v1.c file-v2.c
バージョン管理
Vimから直接バージョン管理メソッドを実行できますが、これで十分な場合がよくあります。 「%」は常に現在のバッファからファイルを置き換える場所であることに注意してください。
:!svn status :!svn add % :!git commit -a
Git機能の現在のチャンピオンは、Tim Popeによる
Fugitiveプラグインです。VimでGitを使用する場合は、このプラグインを強くお勧めします。 Unixでのバージョン管理システムの歴史と基本の詳細については、このシリーズのパート7を参照してください。
大きな違い
グラフィカルIDEに慣れているプログラマーは、多くの場合、
Vimをおもちゃまたは遺物と見なします。 その理由の一部は、
Vimがサーバー上の構成ファイルを編集する手段として使用されており、便利なコマンドラインテキストエディターとして使用されていないことです。 その組み込みツールは、外部のUNIXコマンドと非常によく組み合わされるため、経験豊富なユーザーでさえ驚くことがあります。
継続するには...IDEとしてのUnix:はじめにIDEとしてのUnix:ファイルIDEとしてのUnix:テキストの操作IDEとしてのUnix:コンパイル