ホーム > タグ > lv1

lv1

Hack #170: テキストを折り畳む – 基本編

長いテキストやソースコードを閲覧したり編集する場合、全体の俯瞰が知りたかったり、必要のない部分を無視したいことがあります。 こういった場合、Vim の折り畳み機能が便利です。

本 Hack では何回かに分けて折り畳み機能について解説します。

Folding (折り畳み)

Vim にはテキストを折り畳むための Folding と呼ばれる機能があり、これを使うことで複数行を 1 行にまとめて表示することができます。まとめられた行には要約が表示されます。 折り畳み機能を使うことで、テキストをセクション単位や関数単位などで折り畳んで簡潔に表示することができます。

折りたたまれたテキスト

折り畳まれた行は zo で開き、 zc で閉じることができます。詳細は操作編で解説します。

折り畳みレベル

折り畳みは入れ子にすることができます。これにより、構造化された文書やソースコードを階層ごとに折り畳むことができます。 各行には折り畳みレベルというものがあり、入れ子は実際にはこれによって表現されています。折り畳みレベル 0 が、折り畳みがない状態です。

階層化された折り畳みは zR で全て開き、zM で全て閉じることができます。

折り畳みの種類

折り畳みには、以下の 6 つの種類があります。’foldmethod’ オプションに対して以下のいずれかを設定します。

概要
manual 手動で折り畳みを作成します。
marker 特定の印により折り畳みを作成します。
indent インデントによって折り畳みを作成します。
expr 式を使って柔軟に折り畳みを作成します。
syntax syntax での指定により折り畳みを作成します。
diff diff の際に変更されていないテキストを折り畳みます。

‘foldmethod’ オプションはウィンドウローカルなので、同じバッファを別のウィンドウで別の方法で折り畳むこともできます。

折り畳みの作成と削除

基本編ということで、最後に折り畳みの作成/削除の方法を簡単に紹介しておきます。

‘foldmethod’ が “manual” の場合、自分で折り畳みを作成することになります。折り畳みの作成は zf{motion} か Visual-mode で範囲を選択して zf 、もしくは :{range}fold コマンドで行います。繰り返して実行することで、折り畳みレベルを深くすることができます。

zd でカーソル位置にある折り畳みを削除できます。また、zD でカーソル位置にある折り畳みを再帰的に全て削除できます。

thinca

Hack #166: ローマ字の大文字/小文字を変換する

ローマ字の大文字と小文字を変換する機会は意外に多いです。なので、Vim にはこれを行うための便利な機能があります。

~

~ を押すと、カーソル下のローマ字の大文字/小文字を相互に変換します。大文字は小文字に、小文字は大文字になります。この際、カーソルを右に進めます。 [count] を指定することで複数の文字を同時に変換することができます。変換は一括で大文字/小文字にするのではなく、文字単位で作用します。つまり VimHack は vIMhACK になります。

gu gU g~

これらはオペレータで、対象に対してそれぞれ、gu は小文字への変換を、gU は大文字への変換を、g~ は大文字/小文字の相互変換を実行します。 例えば、現在のカーソルのある単語を全て大文字にしたい場合は gUiw です。 また、yy などと同様に行に対して動作する gugu guu gUgU gUU g~g~ g~~ があります。

Visual mode での u U ~

これらは Visual mode では g なしで動作します。

'tildeop'

'tildeop' オプションをオンにすると、~ はオペレータに変化します。g~ を頻繁に使う場合には便利でしょう。

正規表現

もっと複雑な変換を行いたい場合もあるでしょう。正規表現で置換する際、結果の大文字/小文字を指定することができます。 置換後のパターンに u があると、次の文字は大文字になります。l があると小文字になります。

:s/\w\+/\u\0/g
"bram moolenaar" → "Bram Moolenaar"

また、U や L があると、E が出現するまでそれぞれ大文字/小文字に変換します。

thinca

Hack #164: JavaScript開発環境 その2 CoffeeScriptを使う

問題

JavScriptはその動的性と柔軟な構文により、ブラウザ上で動作するアプリケーションに限らず多くの場で活躍する便利なプログラミング言語です。しかしそれでもいくつか問題が残されています。

  1. セミコロン

    多くのVimユーザはコロンとセミコロンの配置を入れ替え、コロンの入力を容易にするよう調整しているといわれています。しかしながらJavaScriptでは文末にセミコロンの入力を必要とします。

    var a = 1;
    

    上記のような簡素な例だと単純にFPの消費量のみの問題なのですが、しかし以下のようにセミコロンが必要な場合と必要でない場合がすぐに判別しないときもあり、このとき若干の面倒さが残ります。

    function f1() {
      return 1;
    }
    
    var f2 = function() {
      return 1;
    };
    
  2. 括弧

    JavaScriptは関数と変数の名前空間が一致しているためか、関数適用の括弧を省略できない言語仕様となっています。

    f();
    
    f(x);
    

    引数がない場合は()の有無により関数自体か関数実行結果の値かを区別できるというので納得できるのですが、しかし引数がある場合には納得できません。

    f x;
    

    もしこのように書けば、これはf(x)以外に考えられないはずです。それなのに毎回f(x);と記述しなければならないのは冗長で、開発効率の大幅な低下を招きます。

解決法

~/.vim/ftplugin/javascript.vimなどで努力することで、容易に間違いなくセミコロンを入力するためのサポートを行なう、あるいは括弧を自動的に入力するなどやりかたはありますが、いずれもまじめに対処するとなかなか難しい問題です。

もっとも容易な解決策は、例えばJavaScriptを避けることです。

CoffeeScriptでプログラムを書き、JavaScriptにコンパイルする手法を紹介します。CoffeeScriptでは前述の2つの問題を解決し、ほかにもHack #160: JavaScript開発環境で挙げた長い予約語functionをいかにして入力するかという問題も解決します。

例を挙げます。0から2までの数字を出力するコードをCoffeeScriptで記述してみましょう。

f: ->
  memo: 0
  ->
    memo++

Number.prototype.times: (f) ->
  f i for i in [1..this]

g: f()

3.times (i) ->
  p g()

coffee -cpコマンドで、上記コードが以下のようなJavaScriptにコンパイルされます。

(function(){
  var f, g;
  f = function() {
    var memo;
    memo = 0;
    return function() {
      return memo++;
    };
  };
  Number.prototype.times = function(f) {
    var _a, _b, i;
    _a = []; (_b = (1));

    for (i = _b; i <= this; i += 1) {
      _a.push(f(i));
    }
    return _a;
  };
  g = f();
  (3).times(function(i) {
    return p(g());
  });
})();

前述の問題が全て解決したことが分かります。

CoffeeScriptを使うためにはNodeJsCoffeeScript処理系の二つが必要です。2010年7月現在、MacPortsでインストールできるNodeJsはバージョン0.1.92ですが、0.1.98以降で導入されたreadlineや、一部の正規表現エンジンの動作の違いから、0.1.92ではCoffeeScriptの一部の機能しか利用できません。折角ですのでNodeJsは最新版を導入しましょう。

また、CoffeeScriptをVimから快適に使うためのツールがいくつか存在します。以下で紹介する全てを導入することを強くお勧めします。

  1. vim-coffee-script

    http://github.com/kchmck/vim-coffee-script

    ftdetect, ftplugin, indent, syntax全てがそろっています。

    a

  2. quickrun

    http://github.com/thinca/vim-quickrun

    <Space>rなどで編集中ファイルを実行します。CoffeeScriptに対応しています。

    b

    また、明示的に:QuickRun 'coffee -cp'などとすることで、QuickRun出力バッファに, CoffeeScriptからコンパイルした結果のJavaScriptを表示し続けることができ、大変便利です。

新たな問題

JavaScriptでは変数名や関数名をcamelCaseでつけます。つまり、this_is_a_penよりもthisIsAPenが好まれます。JavaScriptを書き慣れている人ならば何の問題もなくcamelCaseで命名していくでしょうが、しかしCoffeeScriptはむしろPythonやRubyのように見えるため、混乱してアンダースコアで小文字の単語を繋げてしまう傾向にあります。

すぐに思い付く解決方法はCoffeeScriptのコンパイラ部分を書き換えて識別子名を自動で置換することでしょうが、しかしこの方法ですともとのCoffeeScriptのコードはcamelCaseでないままです。

解決法

挿入モードの_をシフトキーとして扱うようにし、this_is_a_penと打鍵するだけでthisIsAPenと打鍵したことになるようVim側の挙動を変更します。そのためにstickykey.vimを用います。

  1. http://www.vim.org/scripts/script.php?script_id=2990 からstickykeyをインストールする
  2. ~/.vim/ftplugin/coffee.vimに以下を記述する

    function! JavaScriptUnderScoreBecomesCamelCase()
      if matchstr(getline('.'), '.', col('.')-2) =~ '\w'
        return "\<Plug>(stickykey-shift)"
      else
        return '_'
      endif
    endfunction!
    
    imap <buffer><expr> _ JavaScriptUnderScoreBecomesCamelCase()
    

カーソル位置が[a-zA-Z0-9_]のときのみ_がシフトキーとして動作します。空白文字の上で_を打鍵したときなどは_のままになりますので、例えば_ではじまる関数名の関数を定義するときなどに気兼ねなく_を打鍵できます。

補足

本HackでCoffeeScriptを用いた効率的なJavaScriptの開発方法を紹介しましたが、しかしながら、CoffeeScriptも万能ではありません。無引数関数の値を取り出すための(), 関数リテラルの仮引数指定の(x), 条件演算子a ? b : cの違いなど。これらの問題を解決するためのパッチが勇士によって開発中とのことです。

また、coffee -iで起動するインタラクティブなcoffeeインタプリタをvimshellを用いたVim内で操作できるはずなのですが、現時点ではなぜかうまく動作しないという問題があります。

ujihisa

Hack #160: JavaScript開発環境

問題

Vimのデフォルトの状態でJavaScriptのコードを書くと、以下のような問題が発生します。

  1. インデントがおかしい

    var a = {
      a_
    

    この状態で:を打鍵しますと、

    var a = {
    a:_
    

    のようにインデントが一つもどってしまいます。

  2. キーワードがおかしい

    jQuery時代、$ではじまる変数名を使う機会が増えています。

    var $a = 1;
    

    このaの位置から*を打鍵しますと、$aではなくaという単語だけを検索対象にしてしまいます。

  3. 予約語functionが長い

    JavaScriptでは関数定義時だけでなく無名関数を用いるときにもfunctionという長い予約語を打鍵する必要があります。

解決法

いつくかのプラグインを導入します。

  1. JavaScript syntax プラグインの導入

    http://www.vim.org/scripts/script.php?script_id=1491

  2. Javascript Indentation プラグインの導入

    http://www.vim.org/scripts/script.php?script_id=1840

    var a = {
      a_
    

    この状態で:を打鍵しますと、

    var a = {
      a:
    

    のようになります。

    このプラグインはIndentAnythingというライブラリを使用しているため、こちらのライブラリも導入する必要があります。

    http://www.vim.org/scripts/script.php?script_id=1839

  3. smartchr.vimプラグインの導入

    たとえばプログラミング言語Haskellでは、無名関数を作成するにあたってバックスラッシュを使用します。

    map (\x -> f (x * 2)) [1, 2, 3]
    

    これはJavaScriptでは, jQueryを用いると

    $.map([1, 2, 3], function(x) { return f(x * 2); });
    

    となります。このことから類推すると、\と打鍵することでfunction(と入力されることが望ましいことが分かるのですが、 文字列リテラル内で\を入力するときにfunction(と展開されてしまうと開発に大きな支障をきたしてしまいます。

    文脈に応じて\キーの意味を動的に変更させるという解決方法もありますが、もっと単純にsmartchr.vimを用いて、\一回打鍵するとfunction(に展開し、その状態でもう一度\を打鍵すると\になるという挙動をとるようにすれば、シンプルにして必要十分な解決策となりうるのでないかと筆者は思っています。

    smartchr.vimについて詳しくはHack #131: Rubyで#{をラクに入力するをご覧ください。

    smartchr.vim導入後、以下の設定を~/.vimrcに記述しましょう。

    augroup Ujihisa " {{{
      autocmd!
      autocmd FileType javascript inoremap <buffer> <expr> \  smartchr#one_of('function(', '\')
    augroup END
    

    あるいは、以下の設定を~/.vim/ftplugin/javascript/ujihisa.vimに記述しましょう。

    inoremap <buffer> <expr> \  smartchr#one_of('function(', '\')
    

補足

そもそもJavaScriptを直接記述するのを避け、CoffeeScriptで代用するという手もあります。

ujihisa

Hack #159: オプションの値を気にせずsplit, vsplitする

Vimの標準のコマンドである:split:vsplit、 またはそのマッピング版である<C-w>s<C-w>vは それぞれ&splitbelow&splitrightに依存しており、 自分の思った通りの方向にウインドウを開いてくれない場合があります。

そこで、このようなマッピングを定義します。

nmap spj <SID>(split-to-j)
nmap spk <SID>(split-to-k)
nmap sph <SID>(split-to-h)
nmap spl <SID>(split-to-l)

nnoremap <SID>(split-to-j) :<C-u>execute 'belowright' (v:count == 0 ? '' : v:count) 'split'<CR>
nnoremap <SID>(split-to-k) :<C-u>execute 'aboveleft'  (v:count == 0 ? '' : v:count) 'split'<CR>
nnoremap <SID>(split-to-h) :<C-u>execute 'topleft'    (v:count == 0 ? '' : v:count) 'vsplit'<CR>
nnoremap <SID>(split-to-l) :<C-u>execute 'botright'   (v:count == 0 ? '' : v:count) 'vsplit'<CR>

こうすることでいつでも自分の思った通りの方向にウインドウを開くことができます。

また

nmap spj <SID>(split-to-j)
nmap spk <SID>(split-to-k)
nmap sph <SID>(split-to-h)
nmap spl <SID>(split-to-l)

の部分は自分の好きなように変えてください。 筆者は上のようにそれぞれspj, spk, sph, splに割り当てています。

追記: kana氏の指摘によりコードを大幅修正しました。

追記2: [count]を取れるようにしました。30sphなどとすると30の幅を持つウインドウが左に開きます。 ちなみに現在筆者はマッピングを<Space>sj, <Space>sk, <Space>sh, <Space>slに変更しました。 押しやすいマッピングはVimmerの数だけあるので、各人押しやすいマッピングを常に追求しましょう。 ちょっとでも押しにくいと感じたら積極的に他のマッピングを検討すべきです。

tyru

Hack #158: ユーザコマンドを定義する

: でコマンドラインモードに入ると使えるコマンドは、ユーザが自由に定義することができます。

定義方法

:command コマンドを使用します。書式は以下のようになります。

:command[!] [{属性}...] {コマンド名} {実行するコマンド}

これを見てわかるように、コマンドを定義すると言うことは誤解を恐れずに言うと別のコマンドに対するショートカットを定義しているに過ぎません。 複雑なことをしたい場合、ここは大抵関数の呼び出しになります。 :command 自体に ! を付けた場合、同名のコマンドが定義済みだった場合に上書きします。通常はエラーになります。

コマンド名

コマンド名は、組み込みコマンドと区別が付くように大文字で始めなくてはいけません。また、コマンド名には英数字のみ使用できます。

属性

属性は、-{属性名} もしくは -{属性名}={引数} の形式で指定します。詳細な説明は :help に譲るとして、ここでは概要を紹介します。

-nargs
コマンドの引数の数を指定します。
-nargs=00 個
-nargs=11 個
-nargs=*0 個以上
-nargs=?0 個もしくは 1 個
-nargs=+1 個以上
記号は正規表現と同じと考えれば覚えやすいでしょう。この属性を指定しなかった場合、0 (引数なし) を指定したことになります。
-complete
コマンドの補完方法を指定します。
-complete=augroupオートコマンドのグループ
-complete=bufferバッファ
-complete=commandEx コマンド(と、引数)
-complete=dirディレクトリ
-complete=environment環境変数
-complete=eventオートコマンドのイベント
-complete=expressionVimの式
-complete=fileファイルとディレクトリ
-complete=shellcmdシェルコマンド
-complete=function関数
-complete=helpヘルプの主題
-complete=highlight強調グループ
-complete=mappingマップ
-complete=menuメニュー
-complete=optionオプション
-complete=tagタグ
-complete=tag_listfilesCTRL-D を押した時にタグ、ファイル名を表示
-complete=varユーザ変数
-complete=custom,{func}{func}によるユーザ定義の補完
-complete=customlist,{func}{func}によるユーザ定義の補完
custom や customlist では関数を指定できますが、ここでは割愛します。
-range
コマンドに範囲(:[range]Command)を指定できるようにします。この属性がない場合、範囲の指定はできません。属性の引数で無指定時の初期値を指定します。
-range範囲指定。無指定時は現在行
-range=%範囲指定。無指定時はファイル全体(1,$)
-range=N範囲指定。無指定時は任意の数字 N
-count
コマンドにカウント(:[N]Command [N]) を指定できるようにします。この属性がない場合、カウントの指定はできません。属性の引数で無指定時の初期値を指定します。
-countカウント指定。無指定時は 0
-count=Nカウント指定。無指定時は任意の数字 N
コマンドにカウントを両方(コマンドの前と後)に指定した場合、後に指定したものが有効になります。
-bang
コマンドに ! を付けられるようになります。
-bar
コマンドの後ろに | を付けることで別のコマンドを実行することができます。また、" はコメントの開始になります。 コマンドの引数に | や " を含めたい場合は、| や " とします。 別の言い方をすると、普通に定義したコマンドの引数は :map 系のコマンドのように扱われますが、-bar を付けることでその他のコマンドのような扱いになります。
-register
:delete:yank のように、1つ目の引数にレジスタ名を指定できます。
-buffer
バッファローカルなコマンドになります。

{実行するコマンド}で使える書式

実行するコマンドを指定する箇所では、以下の <…> の形式の特別な文字列を使用できます。

<line1>
指定された範囲の最初の行
<line2>
指定された範囲の最後の行
<count>
与えられたカウント
<bang>
-bang がある場合で、コマンドが ! 付きで実行された場合は ‘!’ と言う 1 文字に、それ以外は空文字列になります。
<reg> <register>
レジスタ名に置換されます。指定なしの場合は空文字列になります。
<args>
与えられた通りのコマンド引数。カウントやレジスタは含まれません。
<lt>
‘<’文字。特別な文字列をそのままの意味で使用したい場合に使います。

特別な文字列の最初に q- を加えると、式の文字列として扱えるようにクォートされます。 例えば、<args> の代わりに <q-args> を指定すると abc は "abc" に、a"bc は "a\"bc" に置き換えられます。引数がない場合は空文字列になります。

<f-args> を使うと、引数を空白で区切ったものを関数の引数として渡せるようにそれぞれをクォートしてカンマで区切ったものに展開します。 実際のルールはもう少し複雑です。詳細は :help <f-args> を参照してください。

thinca

Hack #153: 検索したパターンで置換する

置換を行いたい場合でも、パターンが合っているか、そもそも対象が存在するかを確認するために、まずは検索をしてみるということはよくあります。検索は * による単語の検索やHack #104: Visual mode で選択したテキストを検索するで紹介した方法などで手軽に行えますが、置換となるとそうは行きません。

:substitute の検索パターン

:substitute コマンドの検索パターンに空を指定すると、直前の検索パターンを指定したことになります。これは通常の検索や * によって検索されたパターンも含まれます。つまり、

  1. まずは検索を行う。
  2. :%s//{置換文字列}/g を実行する。

を行うことで、検索パターンを手軽に指定して置換を行うことができます。さらに検索結果をハイライトする設定になっていれば、どこが置換されるかも一目瞭然です。

thinca

Hack #152: VimとGVimの相違点について知る

普段何気なく使っているVimとGVimですが、二つのVimには様々な違いがあります。違いを正しく知って、使い分けることが真のVim使いへの近道です。

Vimの利点

GUIがなくても動作する

sshでリモートログインしてVimを使用する場合、当然ですがGVimは使用できません。

screenやシェルとの連携が楽

GVimでは外部コマンドを呼び出すとDos窓が開いたり(Windows版)、細かな動作が端末時と異なったりと、連携しづらい面があります。 特にユーザーからの入力が必要な場合に厳しいです。screenと連携できるのもVimのみです。外部コマンドを別のscreenで実行しながらVimを併用するというやり方がオーソドックスでしょう。

GVimの利点

描画が高速

端末は古い仕様を引きずっているので基本的に描画が遅いですが、GVimは高速に動作します。特に、Macの端末は描画が遅いようです。

フルカラーが使用できる

特にWindowsの端末はひどく、16色しか使用できません。下線など、GVimにしかない機能もあります。GVim用のcolorschemeを256色環境で使用するには、雑多な設定が必要であるなど、手間もかかります。この辺りの設定については、[Hack #64: 256色ターミナルでVimを使用する]を参照してください。

日本語が使用しやすい

端末の場合、日本語の特殊記号の描画が乱れることがあります。 IMEとの連携も簡単です。端末の場合はそうもいかないので、skk.vimやUIMのvi協調モードを使う必要があります。

設定が簡単である

端末上のVimだと、一部に摩訶不思議な設定をしないと動作しないことがあります。

特殊なキーを利用できる

端末では使用できるキーにかなり制限があります。

複数のGVimを開くことができる

端末ではscreenを使用するか、端末のタブ機能を使うしかありません。

クリップボードを使用できる

端末でクリップボードと連携するにはkana氏の作成した、fakeclip.vimをインストールする必要があります。使い方に癖があるので、注意が必要です。

マウスとの連携

キーボード派からは邪道と言われるかもしれませんが、右クリックでポップアップメニューが使えるのは便利です。

アイコンの使用

エラー部分にxpm形式のアイコンが使用できます。表示がわかりやすくなって便利です。

自由なフォントの使用

通常のVimの場合、フォントは端末に制限されてしまいます。GVimではEmacsのように英字と日本語でフォントを変更したり、フォントの大きさを変えるのも自由自在です。ただし、Mac OS X以外ではプロポーショナルフォントは使用できません。Mac OS Xでプロポーショナルフォントを使用する方法については、次のHackを参照してください。[Hack #92: Vimでプロポーショナルフォントを使う (Mac OS X編)]

Emacsではどうか

EmacsはGUI版で画像が表示できたり、ツールチップに対応しているなど、圧倒的にGUI版が高機能であるうえに、 外部シェルとの連携やEmacsを端末化することも容易です。 よって、screenと連携したり、リモート接続する場合を除きGUI版を利用する人が多いようです。

GVim+vimshell

GVimには前述の通り、欠点もあります。しかしWindowsでは端末とシェルがしょぼすぎる上に、外部コマンドも貧弱、screenもないのでGVim一択となることでしょう。外部コマンドの連携についても、vimshellと併用することで、シェルが必要な作業の90%はこなせると思います。ただしvimshellにはパイプがまともに使えないなどのバグがあります。cursesを用いた複雑なプログラムも動作しないため、そのようなときは端末上のVimを使用せざるをえないでしょう。

筆者の使用環境

筆者はWindowsでもLinuxでも、ほぼGVimのみを使います。なぜなら筆者はVim上ですべての作業を完結させたいと考えていることに加え、端末の描画が遅いことが気になるからです。 日々のシェルを使用する作業はGVim内からvimshellの機能を用いて行います。 どうしようもなければ、時々端末も使用しますが、動作確認でもない限り端末上のVimはほとんど使用しません。

Shougo

Hack #151: 編集中のファイルがあるディレクトリを開く

問題

Vimの:e:newなどはカレントディレクトリにあるファイルを開きます。また補完対象もカレントディレクトリからのファイルです。

:e a<tab>

このようにするとカレントディレクトリのaからはじまるファイル名を対象にファイル名補完を行ないます。

編集中ファイルと同じディレクトリにある他のファイルを開く機会は多いものの、深いディレクトリに潜っているときは厄介です。 編集中ファイルのディレクトリは%:hで指定でき、なおかつ<tab>キーで展開できるものの、毎回%:h…とくに%という文字を打鍵するのかなかなか腰の折れる作業です。

解決法1

一度カレントディレクトリを編集中ファイルのディレクトリに移動するか、あるいはnetrwで編集中ファイルのディレクトリを開くかが良いでしょう。tabpagecdなどのプラグインを使用している場合、編集中ファイルのディレクトリにカレントディレクトリを移動させるのは副作用が大きすぎるため、後者の方法が好ましいでしょう。

:e %:h

で編集中ファイルのディレクトリをnetrwで開き、ファイル一覧を取得できます。この作業を頻繁に行なうならば、あいているキーにマッピングしましょう。例えば-に割り当てるならば、以下の一行を~/.vimrcに記述します。

nnoremap - :<C-u>e %:h<Cr>

解決法2

あるいは<tab>キーでの展開までを一つのキーに割り当てる方法も考えられます。

nnoremap - :<C-u> %:h<Tab>

このまま<Cr>を打鍵するとnetrwでディレクトリを開くので、こちらの解決法の方がより選択の幅が広がるといえます。

補足

netrwよりもモダンなvimfilerプラグインを用いる、あるいはvimshellに全てを委ねるなど、他にもさまざまなアプローチがあります。

ujihisa

Hack #146: Vimで仕事を探す、あるいはVim使いを雇う

問題

Vim使いのあなたは、これまでに鍛えてきたあなたのVimのスキルを最大限有効活用できる仕事をしたいと考えることでしょう。 世の中には二種類の仕事があります。Vimを使う仕事と、そうでない仕事です。 Vimを使わない仕事をすることは、あなたの能力を発揮できないことを意味し、このことはあなたとその会社だけでなく、社会全体の大損害といえるでしょう。

また、あなたの会社がVim使いを欲しているとして、どうやって卓越したVim使いを探せばよいのでしょうか。 www.vim.orgで公開されているpluginから、その作者に直接連絡をとるというのが一つの方法です。 しかし、その作者が現在求職中かどうかが分からないため、この方法は非効率的といえるでしょう。

解決法

上記2つの問題を同時に解決する方法があります。

http://vimjobs.heroku.com/

VimJobs というVimに特化した求人サイトを用います。ここでは誰でも無料でVim使いの求人を行なうことができ、誰でも登録されている会社に応募することができます。VimJobsはVim使いに特化した作りとなっているため、非常に効率的に仕事を探すことができるでしょう。

また、ドキュメントはないものの、VimJobs WEB APIがあるため、Vimから直接VimJobsの求人情報を閲覧できる可能性があります。

VimJobsは現在

  • 英語
  • スペイン語
  • 中国語

の3つの言語のインタフェースが存在します。このことが、さまざまな国で働く機会を得ることに繋がります。

補足

2010年5月12日現在、求人件数は1件です (うち1件はダミーデータ)。

ujihisa

Home > Tags > lv1

Search
Feeds
Links
  • 公式
  • 勉強会
  • 情報
  • コミュニティ
  • プラグイン
  • vimrc
  • Meta
    Etc
    Creative Commons License
    This blog is licensed under a Creative Commons License.

    Return to page top