Developer Enviroments Conference の発表資料

9/8 に開かれた DEcon で windows enviroments and vim という内容で発表してきました。主に自分が使ってる windows の開発に便利なツールと、vim についてプレゼンしてきました。時間大幅に押してしまいましてスイマセン…。
また、スピーカと参加者のみなさん、お疲れ様でした。他の方の開発環境やポリシーが聴けて大変参考になりました。あとカンジマン(id:tnx)には毎度の事ながら様々な準備お疲れ様でした。
自分のプレゼンには自作のはてな記法つかったプレゼンツールを使ったのですが、よくよく考えるとそれをエントリーに貼り付ければいいじゃん!ということに気づいたので、以下に発表資料を貼り付けておきます。

windows environments and vim

secondlife

発表内容

  • windows での環境
    • どんなツールがあると便利か
  • vim
    • vim の基本と vim7 での新機能と text-objects について

自己紹介

開発環境

OS
Windows XP + coLinux (debian sid)
マシン
Thinkpad X41 + 17inch or 24inch モニタ

windows environments

  • windows 大好き!ゲイツ様><ノ
    • 2000 以降はわりと安心してる
    • かゆいところに手が届くソフトウェアがたくさんある
    • IEコンポーネントブラウザスキー
      • web 開発は IE 無いと確認が…
  • explorer がシェル
    • explorer を拡張するだけでほぼすべてのアプリケーションで利用できる

というわけで、利用している便利なソフトウェアの紹介

fub

fuckin uni$ys browser
http://www.geocities.co.jp/SiliconValley-Bay/6049/

窓使いの憂鬱 (mayu)

http://mayu.sourceforge.net/

  • ドライバレベルでキーバインドカスタマイズ
    • 複雑な設定もできるけどそれほど使いこなせてない
  • 日本語キーボードを英語配列で使う
    • thinkpad 41
    • mayu で無変換や変換、カタカナに好きなキーを割り当て
    • |(パイプ)がEnter の左にあるのが個人的に好き
    • ~ が左上なのも良い
  • xkeymacs は使いこなせないので使ってない

bluewind

http://cspace.s2.xrea.com/software/bluewind/

  • コマンドラインランチャ
  • 無難な機能
  • インクリメンタルなコマンド

Avesta

http://lamoo.s53.xrea.com/app/

  • explore like なファイラ
  • キーバインドなど様々なカスタマイズ
  • マウスジェスチャ
  • python 拡張
    • 使えてないけど…

パスをコピー

http://www.vector.co.jp/soft/win95/util/se065538.html

  • 右クリックでパスがコピーできるだけの拡張
  • でも無いと死ねるぐらい多用してる

Eijiro

英和・和英のインクリメンタルサーチ可能な辞書

  • 安価(2000円代)

英辞郎 第二版「Special Valueパック」

英辞郎 第二版「Special Valueパック」

  • 変数考えるときに…

シフトムーブ

http://www.forest.impress.co.jp/article/2005/05/18/shiftmove.html

  • shift + クリックや左右同時押しドラッグで window の移動
  • タイトルバーが隠れた window の移動が楽
  • 上タスクバーやデュアルディスプレイの環境だと多用

kbdacc

http://www.jsdlab.co.jp/~kamei/

  • キーリピート加速ツール
  • windows の設定じゃ最速でも遅い
  • これを使って約3倍速(当社比)ぐらいにしてる
  • 無いとプログラミングできません

migemize explorer

でも今見たらサイトが消えてる!ライセンスが明記されてないため再配布できないみたい。

putty

PuTTY β 0.58 ごった煮版

  • 安定してる
  • 多岐な設定
  • Pageant (keychain)
  • ctrl + tab で putty window だけ切り替え
  • ini ファイルで設定持ち運びも簡単

フォントの話

ちょっと寄り道

  • ビットマップフォントスキー

M+ BITMAP FONTS

アンチエイリアスは小さいフォントで可視性が下がるので、プログラミングには向かない

Alt-Tab Replacement

Microsoft PowerToys for Windows XP
alt+tab 拡張

  • グラフィカル
  • アイコンクリック

htmlhelp

  • windows ユーザは使うべき!!
  • インクリメンタルなインデックスサーチ
  • IE コンポネントでわりと軽快
  • 自分で自動生成するのわりと簡単

Linux な環境

coLinux

うれしいところ

  • サービスとして登録
  • codbcofs で windows の fs に楽にアクセス
cofs0:/  /mnt/win_c cofs   user,noexec,dmask=0777,fmask=0666 0 0
  • ただで環境構築できた、けど
    • VMWare も一部タダだし…
  • /dev/clipboard 欲しい!

zsh

  • PROMPT="%{^[[32m%}[$WINDOW]%{^[[m%}\$ "
  • RPROMPT='%{^[[34m%}[%5~]%{^[[00m%}'
[1]$     [~/.zsh]

screen

  • ステータスライン
hardstatus alwayslastline "%H %`%-w%{=b bw}%n %t%{-}%+w"
  • タイトル変更の hack
    • zsh の preexec hook
    • vim の ByfEnter hook
autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | silent! exe '!echo -n "^[k%^[\\"' | endif

dotfiles の svn 管理

[2]$ ls ~/svn/dotfiles
ctags  irb  screen  ssh  subversion  symlink.rb  vim  zsh
[2]$ ls -a ~/svn/dotfiles/vim
.  ..  .gvimrc  .svn  .vim  .vimrc
  • symlink.rb で適当に管理
#!/usr/bin/env ruby

d = Dir.glob('*/.*').reject{|n| n =~ %r!/((\.svn)|(\.{1,2}))$! }
d.each do |f|
  file = Dir.pwd + '/' + f
  `ln -s #{file} ~/`
end

vim

全世界で開発者がもっとも使ってる(らしい)、至高のエディタ

  • vim の基本操作
    • 軽く vim についてのご紹介
  • vim7 の新機能
  • text-objects について

ホントにそんなに使ってるの?

250 名にアンケートとってみた
http://q.hatena.ne.jp/1157680174

その他 102
秀丸 40
emacs(含むmeadow) 27
vim 15
Em Editor 12
メモ帳 12
eclipse 10
visual studio 9
サクラエディタ 8
xyzzy 8
vim 以外の vi clone 4
萌ディタ 3

アンケート結果考察

  • 6%がvim、その他を除くと10%が vim
  • emacsvim の2倍弱
  • 秀丸がトップ
    • 人気根強し
    • はてな立ち上げ時はプロラマの秀丸率100%

というわけで、日本じゃ emacs > vim

Emacs派 と vim(vi)派の確執

  • それ Emacs でできるよ
  • それ vim でできるよ
    • わりとどっちでもできると思う

モードがあるか無いかが一番の違い

vim の好きなところ

  • モードがある
    • エディタ操作の大体はコピペや整形、文字列操作
    • モード切替により指が疲れない
      • ESC じゃなくて ctrl-[
  • パズル的な操作
  • シンタックスハイライトが多い
    • デフォで 600 ぐらい?
    • /etc/*/httpd.conf とかそういうのも

vim のモード

主に四つ

  • normal
  • insert
  • visual
  • cmdline

基本的にはモードがあると意味不明になってユーザビリティ的によろしくない

  • どうやって保存するんだ!終了するんだ!
  • 慣れると便利

パズル的な操作

編集操作がパズル的

  • ここの部分を選択するには一番どうすれば早い?
  • あの文字に飛ぶにはどうすれば?

詰めvi

詰めvim

// i を ix に変更
for(int i=0; i<100; ++i)
	sum += value[ix];

j:s/i/ix/gc^Mna

  • j で下に移動
  • :s/i/ix/gc で確認モードで置換
  • na で最初は置換しない(no) その後aで全置換

詰めvim

何通りも解き方がある

  • 実際の vim 操作では
    • 最短キー操作が重要ではない
    • 考える時間と少ないキー操作の一番ほどよい感覚で操作
      • このプロセスが楽しい

vim での移動

主に /,?,*,# を使った移動

  • / や ? で前方、後方検索
    • 移動に使いまくります
  • *, # でカーソル下の単語を順に移動
    • 使いまくります
    • 移動した後に s//foo/g でその単語置換も
  • vi 例で良く紹介されている 5w とかは使わない
    • 使うとしても wwwww
    • ものぐさ
  • fX,FX で前方、後方のマッチするXへ移動
    • 自分は使ってない
    • /X, ?X での移動がメイン

/ ? の検索

  • incsearch 派
  • noincsearch 派
  • hlsearch 派
  • nohlsearch 派

自分は

  • noincsearch 派
  • nohlsearch 派

なんで vim じゃインクリメンタルサーチしないの?

  • ほいほい移動されると疲れるし
  • たぶん好みの問題

vim って一つしかファイル開けないの?

間違いです

  • buffer や window, tab(vim7 から)があるよ
  • :vi foo.txt で開ける
  • :ls でバッファ見れる
  • :bn, :bp などで移動

でも使いにくいのでプログラミングには minibufexp が個人的には必須

スキームを開く

デフォルトでこんなことも

ctrl+a, ctrl+x

数値のアップダウン

  • ちょっとの調整が楽
  • true/false などもプラギン使えば可能

ctags

tag を使うと…

  • Ctrl-] でタグジャンプ
  • Ctrl-t で戻る
  • 単語補完も tag から可能

マクロ

  • q で操作記録できる
  • qz で記録すると例えば
:register z
--- レジスタ ---
"z   /mini^MndwuGgg

で見れる

マクロをキー割り当て

キーボード操作を書くだけでキー割り当てができる

nmap si=j:s/i/ix/gc^Mna

すべてキー割り当てが可能

各種モードごとに、もしくはすべてのモードに簡単に

map " すべて
nmap " normal
vmap " visual

などなど。よく使うのは割り当てよう。

nmap <silent> eu :set fenc=utf-8<CR>

hook

わりと様々なタイミングで hook できる

" cofs's fsync
autocmd BufNewFile,BufRead /mnt/c/* set nofsync

vim のさわりなのに多すぎた!

shibuya.vim 開きたい!(半分じょうだん
最後に二つ

help の使い方

:help でひけるhelp超便利

:h autocmd " 組み込み関数とか
:h v_at " visual で at のヘルプ
:h gv " normal で gv のヘルプ

操作方法はtagと一緒

vim の各種コマンドは意味がある

  • w " 単語単位
  • d " 削除
  • dw " delete word
  • vip " visual inner ぱらぐらふ
  • gv " g は変則コマンド

などなど

  • 基本コマンドの意味さえ覚えると
    • あとは組み合わせ既存の技や新しい技が!

vim7 の新機能

とくにコレ便利!というのを紹介!

earlier, later

指定時間前の状態に戻る

:earlier 3m " 三分前の状態に
  • undo, redo を使いまると…
    • 特定状態に戻れないときがある
  • :earlier は時間軸の移動なので戻れる

tab

  • みんな大好きタブがついたよ!
    • 使ってません
  • buffer と window の保存
  • buffer だけで自分は十分

キーワード補完のすごい表示

  • cui で ncurses ってがりがり描画
  • かなり便利
  • 重い

vimscript の拡張

より python ぽく

  • dict 型(hash)
  • list 型

の導入

omnifunc

インテリジェンスな補完

<script t補完
<script t
        type="    *ContentType
        charset=" LangCode

などなど、場合に応じた補完と候補の説明などが表示される

text-objects

  • 個人的にこれが vim を使う一番の理由かも
  • イライラしやすいかゆいところに手が届く
  • テキストをオブジェクトとして扱う
a
a それ自身を含むオブジェクト
i
inner それ自身の内側のオブジェクト
  • ip
    • インナーパラグラフの選択
  • i'
    • シングルクオート内側の選択
  • at
    • タグの選択

何が便利なの?

def method(foo, bar, baz)

の bar にカーソルがあって

di(
delete inner (

を押すと

def method()

となる

何が便利なの?

コード続く…

def method()
  # ...
end

のdef〜end のどこでもいいので

vip
visual inner paragraph

def〜endを範囲選択

  • 似るなり焼くなりお好きなように

何が便利なの?

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

タグ部分を削除したいとき、タグ内部で

vatd
visual a tag delete

でタグを選択して削除

text-objects まとめ

text-objects を理解しておけば、思い通りの文字列選択が可能

:h text-objects

慣れたら自分で text-objects みたいな物をつくっちゃおう

nmap vac $?\%(.*#.*class\)\@!class<CR>%V%0oj
nmap vic $?\%(.*#.*class\)\@!class<CR>%V%0o

vac で class〜end が選択される text-objects

まとめ

  • windows サイコー
    • なんだかんだで windows が一番好きです
  • vim サイコー
    • 使ってるエディタに不満があれば、使ってみるのもいいかと

みなさんの開発の手助けになれば幸いです