Developer Enviroments Conference の発表資料
9/8 に開かれた DEcon で windows enviroments and vim という内容で発表してきました。主に自分が使ってる windows の開発に便利なツールと、vim についてプレゼンしてきました。時間大幅に押してしまいましてスイマセン…。
また、スピーカと参加者のみなさん、お疲れ様でした。他の方の開発環境やポリシーが聴けて大変参考になりました。あとカンジマン(id:tnx)には毎度の事ながら様々な準備お疲れ様でした。
自分のプレゼンには自作のはてな記法つかったプレゼンツールを使ったのですが、よくよく考えるとそれをエントリーに貼り付ければいいじゃん!ということに気づいたので、以下に発表資料を貼り付けておきます。
windows environments and vim
自己紹介
- はてなエンジニア
- 仕事で使う言語
- 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)
Avesta
Eijiro
英和・和英のインクリメンタルサーチ可能な辞書
- 安価(2000円代)
- 出版社/メーカー: アルク
- 発売日: 2005/03/04
- メディア: CD-ROM
- クリック: 7回
- この商品を含むブログ (10件) を見る
- 変数考えるときに…
シフトムーブ
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 ファイルで設定持ち運びも簡単
htmlhelp
- windows ユーザは使うべき!!
- 無いと Ruby や JavaScript, PHP 書けないよ(マジ
- インクリメンタルなインデックスサーチ
- IE コンポネントでわりと軽快
- 自分で自動生成するのわりと簡単
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"
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
ホントにそんなに使ってるの?
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 |
アンケート結果考察
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 での移動
主に /,?,*,# を使った移動
- / や ? で前方、後方検索
- 移動に使いまくります
- *, # でカーソル下の単語を順に移動
- 使いまくります
- 移動した後に 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 などもプラギン使えば可能
マクロ
- 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
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 ってがりがり描画
- かなり便利
- 重い
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