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 について
自己紹介
- はてなエンジニア
- 仕事で使う言語
- JavaScript, Ruby, Perl
- HTML(template), CSS
開発環境
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/
- IE コンポーネントブラウザ
- migemo
- 軽快な本文検索
- ブックマークレット起動
- グループタブと横タブ機能
- 200タブぐらい開いても無理なく管理できる
- JavaScript の DebugConsole も(開発版だと)アルヨ
- 作者さんのポリシーに合ってる
窓使いの憂鬱 (mayu)
- ドライバレベルでキーバインドカスタマイズ
- 複雑な設定もできるけどそれほど使いこなせてない
- 日本語キーボードを英語配列で使う
- 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円代)
-
出版社/メーカー: アルク
-
発売日: 2005/03/04
-
メディア: CD-ROM
-
クリック: 7回
-
変数考えるときに…
シフトムーブ
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
- explorer で migemo
- windows はシェルが explorer !
- 部分一致インクリメンタルサーチ便利
- 検索文字列が表示されるのも便利
- なんとなくカッコイイ
でも今見たらサイトが消えてる!ライセンスが明記されてないため再配布できないみたい。
putty
- 安定してる
- 多岐な設定
- Pageant (keychain)
- WinSCP や TortoiseSVN で
- ctrl + tab で putty window だけ切り替え
- ini ファイルで設定持ち運びも簡単
フォントの話
ちょっと寄り道
- ビットマップフォントスキー
- putty
- gvim
- xyzzy (howm用)
- limechat
アンチエイリアスは小さいフォントで可視性が下がるので、プログラミングには向かない
Alt-Tab Replacement
Microsoft PowerToys for Windows XP
alt+tab 拡張
- グラフィカル
- アイコンクリック
htmlhelp
- windows ユーザは使うべき!!
- 無いと Ruby や JavaScript, PHP 書けないよ(マジ
- インクリメンタルなインデックスサーチ
- IE コンポネントでわりと軽快
- 自分で自動生成するのわりと簡単
Linux な環境
- coLinux + debian sid
- zsh
- screen
- vim
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]
- dabbrev による screen の buffer 補完
- 端末に表示されてる文字列を補完
- C-x C-o C-o
- screen の hardcopy を取得して利用
- http://d.hatena.ne.jp/secondlife/20060108/1136650653
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 管理
- linux環境の同一化
- .zsh* や .vim* などなどの subversion での管理
[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
- emacs は vim の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 が個人的には必須
スキームを開く
デフォルトでこんなことも
- vi http://www.hatnea.ne.jp/
- vi scp://username@example.com/
- vi ftp://...
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 サイコー
- 使ってるエディタに不満があれば、使ってみるのもいいかと
みなさんの開発の手助けになれば幸いです