2012-01-28

pythonbrewによるpythonプロジェクトの開始方法

Ubuntuでの例を示す。

pythonbrewのインストール

一部バグがあるのでローカルで修正(下のリストの2〜3行目)。

$ curl -kL http://xrl.us/pythonbrewinstall | bash
$ vi ~/.pythonbrew/etc/bashrc
            cat /dev/null >| "$PATH_HOME_ETC/venv.run"

次に .bashrc を編集して pythonbrew を有効化する。編集が終わったら一旦ログアウトしてログインし直す。

$ vi ~/.bashrc
[ -e "$HOME/.pythonbrew/etc/bashrc" ] && . $HOME/.pythonbrew/etc/bashrc

pythonのコンパイル

必要なパッケージをインストールしてからコンパイルを行う。

$ sudo apt-get build-dep python2.7
$ pybrew install -v 2.7.2
$ pybrew switch 2.7.2

一旦 switch したら、その設定はログアウトしても保存される。pythonbrew 以前の状態に戻したいときには次のようにする。

$ pybrew off

virtualenvによる新環境の作成

$ pybrew venv create test
$ pybrew venv use test

あとはpipによって必要なモジュールを適宜インストールする。

$ pip install ply

pybrew venv による環境の選択はログアウトすると失われてしまうので、ログイン後毎回行う必要がある。

補足

pipはvirtualenvによる環境ごとにインストールされるので環境変数PIP_RESPECT_VIRTUALENV=trueの設定は必要ない。一方、PIP_REQUIRE_VIRTUALENV=trueの設定はした方が良いかもしれない。PIP_REQUIRE_VIRTUALENV=true を .bashrc 等に書いておくと、pybrew venv use していない状態(ログイン直後など)では pip が動作せず、間違って変な場所にモジュールをインストールしてしまう失敗を防ぐことができる。

(2012/4/17追記) pybrew install の -n オプションは廃止され、デフォルトではテストを実行しなくなった。テストを実行するときには -t オプションを指定する。

2012-01-25

MANPATH

Macでmanのコマンドライン引数補完がうまく働かないので調べてみたところ、MANPATHに適切なパスのリストが設定されていないためだと判明した。手始めにbashrcからMANPATH=の行を削除してログインしてみたところ、何も設定していないのに$HOME/usr/share/manなどがmanpathコマンドの結果として表示された。どうやら最近のmanはPATHから適切なMANPATHを推測するようだ。

というわけでMANPATH=の行をbashrcから削除してみたのだがMacではそれでも補完がうまく働かない。じっくり補完関数を見てみるとuname -sがDarwinのときはmanpathコマンドの出力を見ずにMANPATH変数だけを見ていることがわかった。しょうがないのでbashrcでMANPATH=$(manpath)とした。

2012-01-21

Vim環境の見直し

最近「Vimテクニックバイブル」を読んでVimの環境の設定の見直しを行った。

neocomplcache

neocomplcacheは自動補完を可能にする。

自動補完候補のポップアップメニューが表示された状態で<Tab>, <C-n>, <C-p>で候補を選択できる。<C-y>で選択が確定されメニューが閉じる。<C-e>で選択がキャンセルされる。

候補がスニペットの場合、<C-k>コマンドでスニペットが選択され、さらに<C-k>コマンドによりプレースホルダを移動できる。

<C-x><C-o>によりオムニ補完が起動される。

visualstar

*コマンドを押すことでカーソル下の単語の検索を行うことができるが、visualstarをインストールするとビジュアルモードで選択したテキストの検索を*コマンドで行えるようになる。

この際、単語境界が有効になるが、無効にしたい場合にはg*コマンドを用いる。

YankRing

YankRingにより、ヤンクの履歴を保持できるようになる。pPコマンドによるペースト後に<C-j>, <C-k>を押すことで履歴をたどってペーストしたテキストを置き換えることができる。

また:YRShowコマンドで履歴をバッファに表示して選択などができる。

[pコマンド

[pコマンド[Pコマンドでカーソル位置のインデントに合わせてペーストすることができる。

EasyMotion

EasyMotionによりカーソルの移動先をアルファベット1文字で指定できるようになる。gjコマンドを押すとカーソル位置より下の行ごとにアルファベットが表示され、そのアルファベットを押すとそこにカーソルを移動できる。

同様にgkコマンドではカーソル位置より上の行へ、gwコマンドではカーソル位置以降の単語の先頭へ移動できる。

Surround

Surroundによりテキストを「括弧」で囲んだり、「括弧」を削除したりできる。「括弧」としては通常の括弧以外にクオーテーションやHTMLタグも用いることができる。

ysコマンドによりテキストを「括弧」で囲むことができる。

dsコマンドによりテキストの「括弧」を削除することができる。

csコマンドによりテキストの「括弧」を置換することができる。

ビジュアルモードでテキストを選択した状態でSコマンドを用いることで選択範囲を「括弧」で囲むことができる。

tcomment

<C-_><C-_>コマンドで現在行のコメントアウトをオンオフできる。

ref

refにより様々なリファレンスマニュアルを表示できる。

\kコマンドによりカーソル下の単語のリファレンスマニュアルを表示できる。

:Ref kind keywordコマンドにより任意の種類の単語のリファレンスマニュアルを表示できる。例::Ref perldoc -f print

errormarker

errormarkerにより:makeの結果のエラーをソース行に表示できる。

quickrun

quickrunにより現在のバッファのソースコードを実行できる。\rコマンドで実行される。

vimshell

vimshellはVim内でシェルの実行を可能にする。:VimShellコマンドで実行される。

calendar

calenderによりカレンダーを表示できる。:Calendarコマンドで表示される。

qfreplace

qfreplaceによりquickfixに表示された行をまとめて編集できる。quickfixバッファで:Qfreplaceコマンドを実行するとquickfixに表示された行が表示されたバッファが新たに作られる。このバッファを編集してセーブすると結果が各ファイルの該当箇所に反映される。

unite

N/A.

2012-01-17

vimプラグインneocomplecacheのキーバインド設定

vimでneocomplecacheを試している。何も設定しないと使えない機能があったりやや謎の挙動を示したりするので、キーバインドを設定する必要がある。

imap <C-k> <Plug>(neocomplcache_snippets_expand)
smap <C-k> <Plug>(neocomplcache_snippets_expand)
" inoremap <expr><C-g> neocomplcache#undo_completion()  " buggy
inoremap <expr><C-l> neocomplcache#complete_common_string()
inoremap <expr><CR> neocomplcache#close_popup() . "\<CR>"
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
" inoremap <expr><C-h> neocomplcache#smart_close_popup() . "\<C-h>"
" inoremap <expr><BS> neocomplcache#smart_close_popup() . "\<BS>
inoremap <expr><C-y> pumvisible() ? neocomplcache#close_popup() : "\<C-y>"
" inoremap <expr><C-e> neocomplcache#cancel_popup()
  • コードスニペット補完のプレースホルダを移動するのに<C-k>を用いるようにする。
  • ポップアップ中に<C-g>を押すことで補完をキャンセルできるはずだが、現在何か挙動が変なのでコメントアウトしてある。
  • ポップアップ中に<C-l>を押すことで候補の最長共通部分まで補完を進めるようにする。
  • ポップアップ中に<CR>を押すことで、ポップアップを閉じ、候補を選択していない場合には単に改行を入れ、選択している場合には確定して改行をいれるようにする。
    • <CR>は何も設定しないと改行が入力されたりしなかったりする謎の挙動をする。
  • ポップアップ中に<TAB>を押すことで次候補に移動するようする。
  • ポップアップ中に<BS>を押すことでポップアップを閉じて1文字削除するようにできるが、1文字削除に伴って候補が更新される方が好みなので設定しない。
  • ポップアップ中に<C-y>を押すことで選択候補を確定させてポップアップを閉じるようにする。
  • ポップアップ中に<C-e>を押すことで候補の選択をキャンセルしてポップアップを閉じるようにできるが、単に候補の選択をキャンセルする方が好みなので設定しない。