gitosisを導入

散々手こずらされたので、ここにログとして残しておきます。

gitosisのインストール

まず、http://centossrv.com/rpmforge.shtml などを参考に、RPMforgeを導入しておく。

gitをインストール。

# yum -y install git --enablerepo=rpmforge

python-setuptoolsが必要なのでインストール。

# yum -y install python-setuptools

gitosisもインストール。

# git clone git://eagain.net/gitosis.git
# cd gitosis
# python setup.py build
# python setup.py install

gitユーザーを作成

続いて、gitユーザーを作成する。名前はgitでなくてもいいと思うけど、とりあえず素直にgitで。

# useradd git

次に、リポジトリを作成。リポジトリの管理(ユーザーや鍵の管理)もgitを使って行うので、その管理を行うユーザーから、SSHで接続できるようにする必要がある。そのために必要な鍵(公開鍵)を、あらかじめコピーしておいて、登録。

[git ~]$ gitosis-init < id_rsa.pub
[git ~]$ chmod 0755 repositries/gitosis-admin.git/hooks/post_update

パスを通す

Pythonを/usr/local/python にインストールしたためか、「gitosis-serve: command not found」と怒られてしまったのでパスを通しておく。ただ、SSH接続時に実行されるコマンドなので、.bash_rc とかに書いても通らない。なので、まず sshd_config のPermitUserEnvironmentをオンにしておく。セキュリティ的なことは知らない。

# vim /etc/ssh/sshd_config
PermitUserEnvironment yes

# /etc/init.d/sshd restart

でもって、/usr/local/python/bin を通しておく。あと、「OSError: No such file or directory」みたいなエラーも吐いてくれるので、/usr/libexec/git-core も通しておく。これも環境的な問題かも。

[git ~]$ vim .ssh/environment
PATH=/usr/local/python/bin:/usr/libexec/git-core:$PATH

リポジトリの管理

最初に登録した鍵を持っているユーザーで管理する。まず、管理用のリポジトリ(gitosis-admin)をcloneする。

$ git clone git@localhost:gitosis-admin.git

こうすると、gitosis-adminって言うディレクトリが作成されるはず。ファイル構成はこんな感じ。

gitosis-admin/
  gitosis.conf   ← リポジトリの設定
  keydir/        ← 公開鍵を保存

編集したら、addしてcommitしてpushする。

$ git add . -A
$ git commit
$ git push

ユーザーを追加

ユーザーを追加するときは、gitosis.confのmembersに追加する。

$ vim gitosis.conf
[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = foo@localhost.localdomain root

さらに、公開鍵も保存しておく。もちろん、この公開鍵は、追加するユーザーが所有している鍵と対になるもの。

$ echo 'ssh-rsa ...' > keydir/root.pub

あとは、ちゃんとpushしておく。

リポジトリを追加

リポジトリを追加する場合は、gitosis.confのwritableに追加する。

$ vim gitosis.conf
[gitosis]

[group gitosis-admin]
writable = gitosis-admin hoge
members = foo@localhost.localdomain

pushすると、hogeというリポジトリが利用できるようになる。
使うためには、まずファイルを追加しておく。

$ mkdir hoge
$ cd hoge
$ git init
$ touch test
$ git add test
$ git commit

で、リモートリポジトリを指定してpushする。末尾には自動的に .git がつく。

$ git remote add origin git@localhost:hoge.git
$ git push origin master

これでちゃんとcloneしたりできるようになる。

$ git clone git@localhost:hoge.git

Djangoのデバッグツールバー

symfonyからDjangoに移ってきた関係で、Djangoのいいところもいろいろ分かったのだけれど、ちょっと気に入らないところも見えてきた今日この頃。
その1つ目がデバッグツールバー。symfonyには標準で備わっていて、そのページで実行されたSQLや使用されたテンプレート、エラーログも見られて、拡張も出来る優れものなんだけど、Djangoには標準で備わっていなくて不便だなと思っていました(実際、そんなに開発してはいないけど)。
そんなときに見つけたのが、django-debug-toolbarでした。これがsymfonyのものとほとんど同じ機能を提供してくれる感じで、なかなか便利そう。というわけで、インストールの手順と、設定方法を残しておきます。

インストール

まずeasy_installをインストールしておく。

$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py

django-debug-toolbarをインストール。

$ sudo easy_install django-debug-toolbar

設定

Djangoプロジェクトのsettings.pyを編集。http://github.com/robhudson/django-debug-toolbar/blob/master/README.rst を参考に。

settings.py:
...
INTERNAL_IPS = ('127.0.0.1',)

DEBUG_TOOLBAR_PANELS = ( 
    'debug_toolbar.panels.version.VersionDebugPanel',
    'debug_toolbar.panels.timer.TimerDebugPanel',
    'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel',
    'debug_toolbar.panels.headers.HeaderDebugPanel',
    'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
    'debug_toolbar.panels.template.TemplateDebugPanel',
    'debug_toolbar.panels.sql.SQLDebugPanel',
    'debug_toolbar.panels.signals.SignalDebugPanel',
    'debug_toolbar.panels.logger.LoggingPanel',
)

DEBUG_TOOLBAR_CONFIG = { 
    'INTERCEPT_REDIRECTS': False,
    #'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar,
    #'EXTRA_SIGNALS': ['myproject.signals.MySignal'],
    'HIDE_DJANGO_SQL': False,
    #'TAG': 'div',
}
...
MIDDLEWARE_CLASSES = (
    ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
)
...
INSTALLED_APPS = (
    ...
    'debug_toolbar',
)

INTERNAL_IPSにIPアドレスを指定しておくと、そのIPアドレスからアクセスしたときだけデバッグツールバーが表示されるようになります。また、DEBUG = False にすると、常時デバッグツールバーが表示されなくなります。ただし、SHOW_TOOLBAR_CALLBACK を指定していない場合だけ。

DEBUG_TOOLBAR_CONFIG の簡単な説明

INTERCEPT_REDIRECTS
Trueだと、リダイレクト時(HttpResponseRedirectを返したとき)に、中間ページを表示してログなどを見られるようにする(デフォルト: True)
SHOW_TOOLBAR_CALLBACK
ツールバーを表示するかどうかを制御する関数を指定。その関数はTrue/Falseを返すようにする。省略、もしくはNoneを指定しておくとデフォルトの動作(DEBUGとINTERNAL_IPSを見る)
EXTRA_SIGNALS
プロジェクトで使ってるカスタムシグナル(Observerパターンみたいなやつ?)をリストで指定。
HIDE_DJANGO_SQL
Trueだと、Django自身のコードがSQLスタックトレースに表示されなくなる、らしいけど、よく分からない。(デフォルト: True)
SHOW_TEMPLATE_CONTEXT
Trueだと、テンプレートに渡されている変数(コンテキスト)をテンプレートパネルに表示する。(デフォルト: True)
TAG
どのタグにデバッグツールバーのHTMLを埋め込むか。指定したタグのうち、最外殻(?)のタグ内の最後に埋め込まれるみたい。デフォルトだとbodyタグ内の最後に埋め込まれる。

追記(2010/8/23)

DEBUG_TOOLBAR_CONFIGには以下のものも設定できるようです。

MEDIA_URL
django-debug-toolbarが使っているCSS等のURLのプレフィックス。デフォルトでは、<リクエストのSCRIPT_NAMEヘッダ>/__debug__/m/。ただし、URLディスパッチャでは、/__debug__/m/ となることを想定しているようなので、SCRIPT_NAMEヘッダが指定されているリクエストが送られると、スタイルが適用されなくなる。その場合は、これに"/__debug__/m/"を指定すればOK。
Apacheの設定で指定した"django.root"がSCRIPT_NAMEにくるようなので、そのままの設定で問題ないです。基本的にはいじらず、独自のCSSを使いたいときだけ設定するのだと思います。

DjangoでJobeet 1日目

symfonyにはJobeetという、よくできたチュートリアルがあります。対して、Djangoのチュートリアルというとあまり充実していないように思います(知らないだけかも)。なので、本家のドキュメント等を見ながらDjangoを使って、このJobeetをやってみようと思います(現在進行形)。ここにはそのログだけ残していくような。あと、勉強中なので間違っていたり、一般的に使われない方法を書いているかもしれないですが、そこはご了承ください。

まず、やっている環境を書いておきます。

MacOS X 10.6.4
Python 2.6.5


では、Jobeet 1日目に・・・と言っても、1日目にやるのは環境整備だけですけどね。
とりあえず、Djangoのインストール。ここからDjangoのtarボールをダウンロードしてインストールします。なお、この記事を書いた時点でのバージョンは1.2.1でした。

$ wget http://www.djangoproject.com/download/1.2.1/tarball/
$ tar xzvf Django-1.2.1.tar.gz
$ cd Django-1.2.1
$ python setup.py build
$ sudo python setup.py install

次にプロジェクトの作成。適当なディレクトリに移ったあと、以下のコマンドを実行します。なお、symfonyとは違い jobeet/ ディレクトリは作成されるので、あらかじめ作っておく必要はありません。

$ django-admin.py startproject jobeet

また、symfonyとはアプリケーションの概念が異なるので、frontendアプリケーションは作成しません。と思います(ry

最後にブラウザで確認。DjangoにはPythonでできた開発サーバーが入ってるので、開発中はこれを使います。

[jobeet]$ ./manage.py runserver

あとはブラウザから、 http://localhost:8000/ にアクセスすれば確認できます。「It worked! Congratulations on your first Django-powered page.」と書かれたページが出ると思います。
なお、同じホストで開発していない場合には、最後にクライアントのIPアドレスを指定すれば、外部ホストからもアクセスできるようです。面倒くさい場合は以下のように。

[jobeet]$ ./manage.py runserver 0.0.0.0:8000

Operaの検索エンジンにWikipediaを追加する

Firefoxのあまりの重さに嫌気がさして、軽いと評判(?)のOperaを使ってみることにしました。Safariはマウスジェスチャがないということで除外、Chrome拡張機能には対応したらしいのですが、Firefoxのアドオンほど充実していない+まとまっていない(感じがある)ということで同じく除外。
使ってみると確かに驚きの速さ。ページ遷移やタブ遷移なんかは速すぎて頭がついていかないぐらいですw 新しくページを開くことに関してはそこまで速いとは感じなかったものの、戻る/進むに関しては一瞬。あのFirefoxのもっさり感とは雲泥の差ですね。
さて、さっそくごにょごにょと自分色に染めていこうとしているところなのですが、Operaにはアドレスバー(検索バーじゃなくて)に「(特定のキーワード) 検索ワード」と打つと、キーワードに対応した検索エンジンで検索してくれる機能があります。たとえば、


y Google

と検索するとYahoo!でGoogleを検索してくれる、と。
これはいい!と思ったのですが、どうもデフォルトではWikipediaがない・・・。ということなので、自分で追加してみたのですが、若干はまったのでここに残しておきます。


まず、新しい検索エンジンは「設定」の「ウェブ検索」タブから追加できます。ここに、検索エンジン名、関連づけるキーワード、および検索するためのアドレスを指定することになります。Wikipediaの場合、以下のように設定してみました。


検索エンジン: Wikipedia
キーワード: w
アドレス: http://ja.wikipedia.org/wiki/%s

"%s"が検索ワードに置き換えられるようです。他にも"%i"とかもあるようですけど、よくわかりません。。ページ数とかですかね。
このように設定すれば、アドレスバーで「w opera」と打つと、Wikipediaで"opera"が検索されることになります。
なのですが、日本語を検索するとWikipediaからエラーを返されてしまいます。どうも文字コードが悪いみたいですね。残念ながら、Operaの設定画面からは文字コードを指定できないので、設定ファイルを直接いじって変更することにします。以下のファイルを編集します。

Windows XP以前: C:\Documents and Settings\<ユーザー名>\Application Data\Opera\Opera\profile\search.ini
Windows Vista以降: C:\Users\<ユーザー名>\AppData\Roaming\Opera\Opera\profile\search.ini
Mac: ~/Library/Preferences/Opera Preferences/search.ini

Operaの設定画面から設定したのであればほとんどの部分は自動的に生成されているので、「Encoding=...」の部分を「Encoding=utf-8」に変更してやればOKです。

Encoding=iso-2022-jp

Encoding=utf-8

あとは、Operaを再起動すれば、日本語で検索できるようになります。
価格.comとかも同じ要領でできるのかな・・・。なかなかOperaも奥が深そうです。

スプリングフォルダで新しいウィンドウ

Macにはスプリングフォルダという機能があります。仕組みは こちら に書かれているのですが、非常に便利な機能です。こういった細かい機能が便利すぎてMacがたまらないです。まあ、Mac全体でいえばWindowsの方がいいなと思う部分もいくつかあるんですけど。
で、このスプリングフォルダ。僕は普段のFinderの表示はアイコン表示にしているのですが、これだとファイルをフォルダにドラッグしたときに、単にそのフォルダに切り替わるだけなんですよね。切り替わったはいいものの、前のフォルダに戻る方法がない(知らないだけかも)。。CoverFlowとかだと新しくウィンドウを開いてくれて、開いたウィンドウの外にファイルをドラッグしたら、開いたウィンドウを閉じてくれるので便利なんですけど。「フォルダを常に新規ウィンドウとして開く」にしていればアイコン表示でも同様の動作をしてくれるのですが、それはそれで大量のウィンドウができてしまうのでいただけない。
何とかならないものかと思っていたら、あっさり解決しました。


[解決法]
Commandキーを押しながらドラッグする

分かりやすい仕様でよかったw この辺はWindows、Macともに操作感が統一されていていいですね。
あ、ちなみにファイルの移動・コピーを取り消すにはEscキーを押せばいいのですが、Commandキーを押したままEscキーを押すとFront Row(Windows Media Centerみたいなの?)というものが起動してしまうのでお気をつけて。

Netrwを使いこなす

VimにはNetrwという、非常に便利なファイルブラウザがあります。
SSHでサーバーにアクセスしてファイルを編集するなど、ターミナル上で作業をする人は、"ls"とか"cd"コマンドを駆使して作業をしていると思います(Emacsを使ってる人はともかく)。これはこれでいいのですが、やはりいちいちコマンドを打たないとファイルが見れない、カレントディレクトリを変更できないなど不便な点があります。ところが、Vimのファイルブラウザを使うと、GUIで作業しているかのようにディレクトリを移動したりファイルを開いたりできるのです。もちろんVim上なのでシェルコマンドも実行できます。
というわけで、その使い方をメモ程度に記します。

ブラウジングを始める


以下のコマンドを打てば、ファイルブラウザが起動します。現在のバッファが編集中(保存していない)の場合は、水平方向に分割して表示されます。

:Explorer

これ以外にもいろいろあるので、まとめておきます。

:Explorer 現在のバッファでブラウジングを開始(編集中なら水平に分割)
:Explorer! 上と同じ。ただし編集中の場合に垂直分割
:Hexplorer 横方向に分割して下のウィンドウでブラウジングを開始
:Hexplorer! 上と同じ。ただし上のウィンドウでブラウジングを開始
:Vexplorer 縦方向に分割して左のウィンドウでブラウジングを開始
:Vexplorer! 上と同じ。ただし右のウィンドウでブラウジングを開始
:Texplorer 新しいタブでブラウジングを開始

一応、Sexplorerというものもあるのですが、Hexplorer、Vexplorerで十分なので省略します。
ちなみに、このブラウジング画面は、ディレクトリを指定してVimを開いたときにも表示されます。

ファイルを開く・カレントディレクトリの移動


まず、最低限必要な、ファイルの編集、およびディレクトリの移動についてまとめます。

Enter ファイルを開く or ディレクトリを移動する
o 上と同じ。ただし、水平方向に分割する
v 上と同じ。ただし、垂直方向に分割する
t 上と同じ。ただし、新しいタブに表示する
p 上と同じ。ただし、プレビューウィンドウに表示する
–(ハイフン) 上の階層へ移動する
u 前にいたディレクトリに戻る(アンドゥ的な)
U uで戻る前のディレクトリに移動する(リドゥ的な)
c このバッファのカレントディレクトリを、現在開いているディレクトリに変更

注意してほしいのですが、Enterや–で階層を変更しても、Vimの(厳密に言えばこのバッファの)カレントディレクトリが変わるわけではないということです。ファイルブラウザではどれだけ階層を変更したとしても、ブラウザを開いた時点でのカレントディレクトリが変更されることはありません*1

ディレクトリの作成と削除


ファイルを開く方法は上に記したので、ディレクトリの作成と削除について記します。

d ディレクトリを作成
D ファイル・ディレクトリを削除(ディレクトリに関しては、中が空の場合のみ)

作成と削除だけなのでこれだけです。「ファイルを作成」というコマンドは用意されていないのですが、単に":e <ファイル名>"コマンドを実行すればファイルを作成して編集することができます。ただし、上記の"c"コマンドでカレントディレクトリを移しておかないと、想定外の場所に作られてしまうのでご注意を・・・。ちなみに、この2つのコマンド、というかNetrwのキーマップで呼ぶコマンドの場合はカレントディレクトリを変更する必要はありません。
あと、"D"コマンドについて、中にファイルがあるディレクトリを削除できないと書きましたが、これはVimが"rmdir"を実行しているためです。この設定は、g:netrw_local_rmdirに依存するので、これを"rm -rf"に変更すれば中にファイル・ディレクトリがあっても削除することができます。もっとも危険ではありますが
もちろん、Vimからシェルスクリプトを呼ぶこともできるので、":!rm -rf hoge"でも削除できます。ただし、カレントディレクトリをきちんと変更しておかないと、場合によっては惨いことになるのでご注意をw

ファイルのマーク


さて、ここに来て謎の“マーク”という単語が出てきましたが・・・。これは特に怪しい(?)ものではなくて、要は“ファイルを選択する”というようなものです。選択してどうするのか?というと、もちろん選択したら移動とかコピーをしますよね。
というわけで、まずマークの仕方についてまとめます。

mf カーソル上のファイルをマークする/マークを解除
mr ワイルドカードを指定してファイルをマークする
mu すべてのマークを解除

ただし、"mr"について、ドキュメントには以下のように書いてあります。

Note: 使用できるのはVim正規表現です (|regexp|)。シェルのものとは違います。なので例えば *.c と入力しても期待どおりにはならないでしょう。

ですが、実際に試してみたところどう見てもワイルドカードでした本当に(ry
もっとも環境によるのかもしれませんが、少なくともMacPortsで入れたVim、およびWindowsに入れたKaoriYa版のVimでもワイルドカードになっていたので、ドキュメントの間違いかと思われます。

ファイルのコピー・移動


マークが終わったら次はコピーです。“終わったら”って表現も妙ですが。。

mt コピー・移動先のディレクトリを、カーソル下のディレクトリに設定する
mc マークしたファイルをコピーする
mm マークしたファイルを移動する
D マークしたファイルを削除する

コピー・移動を行う際には、まず移動先のディレクトリを指定する必要があります。“カーソル下の”というのがミソで、ディレクトリ上にカーソルがある場合はそのディレクトリに、ファイル上あるいは関係ないところにある場合は現在のディレクトリ(カレントディレクトリではない)になります。
あとは、"mf"、"mr"でファイルをマークして、"mc"、"mm"コマンドでコピー・移動ができます。なお、マークしたファイルに対するコピー・移動操作は、現在のディレクトリ上にあるファイルにしか適用されないようなので、複数ディレクトリにあるファイルをまとめてコピー・移動するようなことはできないようです。
あと、ここでも"D"コマンドが出てきましたが、このコマンドは、マークしたファイルがある場合には、マークしたファイルを削除するようになります。前述の、適用されるマークファイルの範囲など、地味な罠があるので、"D"コマンドを打つ場合には、表示される確認プロンプトでファイル名を確認した方がいいと思われます。
なお、マーク、およびコピー・移動はディレクトリに対しては行えません。なので、ディレクトリをコピーしたいときは、シェルコマンドを打つしかなさそうです。

その他のファイル操作


マークしたファイルに行える操作のうち、上に記していないものを書きます。

mx シェルコマンドを実行。コマンド中の"%"がファイル名に置換される
md vimdiffを実行。ファイルは3つまでで、現在のディレクトリに関わらず、すべてのマークファイルが対象になる
mg vimgrepで検索。現在のディレクトリに関わらず、すべてのマークファイルが対>象になる
mh マークしたファイルと同じ拡張子を持つファイルを隠す

マークしていないファイルについても、以下のような操作が行えます。

qf ファイルの情報を表示する。"ls -l"で表示される項目
R ファイル・ディレクトリの名前を変更する(2010/6/4 追加)

Rコマンドはファイルのフルパスを変更するので、これによってファイルの場所を変更することもできます(2010/6/4 追記)。

表示をいじる

ファイル操作は以上で終わりで、次は表示に関するコマンドをまとめたいと思います。
まずはソートについて。


r ソートの順番を逆にする
s ソートの種類を変更(名前 -> 時間 -> ファイルサイズ)

名前によるソートは、g:netrw_sort_sequenceにパターンを設定することで、変更することができます。
次に、いらないファイルの表示・非表示について。

a すべて表示 -> 隠しファイル非表示 -> 隠しファイルのみ表示
gh ドットで始まるファイルの表示・非表示を切り替える
mh 前述

少しややこしいので説明します。まず、ファイルブラウザの表示状態には、「すべて表示」「隠しファイルを非表示」「隠しファイル"のみ"表示」という3つの表示状態があります。"a"コマンドはこれらの状態を切り替えるものです。そして、"gh"や"mh"コマンドは、指定したファイルを隠しファイルにする/元に戻すという操作を行うだけで、実際に表示されるかどうかは、前述の表示状態に依存します。
なお、g:netrw_list_hideにパターンを設定すれば、自動で隠しファイルと判断してくれるようになります。というか、"gh"、"mh"コマンドは、単にここにパターンを追加しているだけだったり。

外部との通信


Netrwで最も面白いと思ったのは、この外部との通信機能です。こう書くとよくわからないかもしれませんが、要するにscpやftpのクライアントとして使えるよ、ということです。ローカル環境で作業をするのであれば、GUIのクライアントを使った方が便利な場合が多いのですが、SSHで接続してるリモート環境で、さらに別のサーバーとファイルの送受信を行いたいときなんかにはかなり役に立つと思います。まあ、そんな状況がそうそうあるかどうかはともかく。。


ftpは触ったことがないので、とりあえずscpだけ記しておきます。
接続方法は簡単で、


:Explorer scp://user@host/path

を打つだけです。これで、パスワードを求められると思うので、認証が通ればリモートのファイルが表示されるようになります。
ただし、これには不便な点があって、ディレクトリを移動したりファイルを開くたびにパスワードを求められてしまいます。これでは単なるストレッサーにしかならないので、もうちょっと便利に使えるようにします。結論を言うと、要するに認証は最初だけで、一度つなげば自動的に認証してくれるようにする、ということです。
パスワードを毎回求められるのを防ぐためには、鍵認証を行う必要があります。パスワード認証を使っている場合は、先に鍵認証を導入してください。こちらのサイトに書かれています。
まずはUnix環境から。ssh-agentを使って鍵を追加します。以下のコマンドを実行してください。

$ eval `ssh-agent`
$ ssh-add ~/.ssh/hoge.pem

秘密鍵にパスワードを設定している場合は、このタイミングでパスワードが求められると思います。鍵を追加できれば、あとは先ほどの方法でサーバーに接続すれば、パスワードなしでローカル環境のようにアクセスできるようになります。
なお、鍵ファイルにパスワードを設定していないのであれば、鍵ファイルを .ssh/id_rsa という名前にすれば ssh_agentを用いなくても接続できます。パスワードを設定しているのであれば、やはり ssh-agentを使ってください。


次にWindows環境なのですが、これがどうも厄介なことにファイルを編集することができないようです。ファイル一覧を見ることはできるので、その手順だけ説明します。
まず、PuTTYをインストールします。アーカイブ版でも問題ないです。
次に、vimrcに以下の設定を追加します。

let g:netrw_scp_cmd='C:/putty/pscp.exe -q -batch'
let g:netrw_ssh_cmd='C:/putty/plink.exe'

PuTTYの置き場はどこでもいいのですが、スペースを含むパスの場合にうまく動かないようなので、スペースを含まないパスを指定してください。
次に、'C:\tmp'ディレクトリを作成します。なくても動くのですが、これがないといちいち".swpファイルを作れないよ"というメッセージを出してきて鬱陶しいので、作っておいた方がいいです。
あとは、Unix環境と同様のコマンドでサーバーに接続します。念のため、こちらにも。


:Explorer scp://user@host/path

で、ファイルを開いてもらうと分かるのですが、たぶん何も表示されないと思います。確認してみたところ、Vimはどうやらpscp(というよりcmd.exe)に対して、シングルクォーテーションでパラメータを囲んで、渡しているようなのです。Windowsではダブルクォーテーションを用いるのが普通なので、このせいでうまく動かないようです。何てことしやがる

リモートとローカルとでファイルをコピー・移動する


最後に、リモートからローカルに、あるいはローカルからリモートにファイルをコピー・移動する方法を説明します。
と言っても、その手順は前述した通りで、「移動先を指定」「ファイルをマーク」「コピー・移動」を行うだけです。ただし、リモートからファイルを持ってくる場合に、そのままだとエラーが出るので、リモートバッファ上で以下のコマンドを打っておきます。

:let b:netrw_islocal=0

この辺自動的にやってくれても良さそうなものなのですが、なぜか手動でやらないとうまく動かないようです。ディレクトリを移るたびに、これを実行しないといけないので地味に面倒くさいです。逆に、ローカルからリモートに関しては、特に何もせずにコピーできるようです。
なお、それ以外の操作(ディレクトリの作成、削除など)に関しても、前述したコマンドで実行できます。


以上、ファイルブラウザの使い方について、ざっと書いてみました。ここに書いていないものもありますので、それらについてはドキュメントを参照してください。

*1:g:netrw_keepdirで設定を変更できます。

オムニ補完が使えるようになった

前の記事で、MacのVimPythonのオムニ補完が使えないと文句を言っていましたが、MacPortsでインストールすると無事使えるようになりました。以下、その手順を載せておきます。


  1. 最新版のXcodeをインストールする(付属のCDだと64ビット用にコンパイルできないみたい)

  2. MacPortsをインストール

  3. "sudo port selfupdate"、"sudo port sync"を実行しておく

  4. "sudo port install vim +huge +python26 +ruby"を実行


たぶんこれで入るはず。"+universal"をつけると何かエラーが出たので外しています。まあ、別になくてもいいか。ちなみに、"universal"については、こちらで説明されています。
とりあえず、これで開発のスピードが上がるはず・・・特に開発はやってないけど。