linuxにおける開発環境
DESCRIPTION
TRANSCRIPT
1
社内技術勉強会「 Linux における開発環境」
2008/02/27 Tomohiro MITSUMUNE
(a.k.a. Kiske)
本日のアジェンダ
• 開発環境について• Linux での開発環境
–zsh–screen–vim (or Emacs)
2
開発環境• GUI (Windows)
– マウス操作を主体とした直感的な操作– 文字だけでなく画像を利用し、動作を明確化– インストールしてすぐ使える– 設計で想定されたことしかできない– 重い、遅い
• CUI (Unix, Linux)– 覚える事が多くて、敷居が高い– 多くのことを自分で設定する必要がある– 軽い、早い
3
Windows>Linux での開発環境の問題
• シームレスな開発ができない– Windows 側でコード修正– scp, sftp, svn とかで Linux 側にアップロード– 変更の度に deploy 作業が生じるため、効率悪
• 文字エンコード , 改行コードの違い– アップロード後に「動かねー」と叫ぶ理由の
1 つ
4
Linux での開発
• Linux 環境での開発効率向上アイテム– zsh– screen– vim (or Emacs)
• 開発効率が上がると– 早く帰れる– 友人 / 家族 / 恋人と団欒– 趣味の時間
リア充への第一歩!5
zsh
• Unix のコマンドシェルの 1 つ• bash + tcsh + ksh = 「究極のシェル」• 主な機能
– コマンド補完機能– プロンプト表示– スペル修正機能– コマンドラインスタック– 拡張されたファイル選択
• 参考記事 [http://journal.mycom.co.jp/column/zsh]
6
autocomplete• コマンド自動補完autoload –U compinitcompinit• さまざまなコマンド補完に対応
– シェルコマンド ( ls, tar, diff, etc…)– ソフトウェア ( apache, php, ruby, etc…)
• 自分でコマンド補完リストも作成可能
7
プロンプト表示• RPROMPT
– コマンドライン右側に出るプロンプト– カレントディレクトリとか出すと便利– コマンドが長くなってくると勝手に消える
local GREEN=$'%{\e[1;32m%}'local BLUE=$'%{\e[1;34m%}'local DEFAULT=$'%{\e[00;m%}‘PROMPT=$BULE'[${USER}@${HOSTNAME}] %(!.#.$)
'$DEFAULTRPROMPT=$GREEN'[%~]'$DEFAULT
8
グローバルエイリアス• コマンドライン上の全ての要素をエイリアス
として展開– 通常のエイリアスは第 1 要素のみ
alias -g L="| $PAGER"alias -g G="| grep"alias -g T="| tee -a logfile“alias -g H="| head"alias -g TL="| tail“• abbreviation という更に便利な機能もある
9
コマンドラインスタック• M-q• 入力中のコマンドを一時保存できる./configure --prefix=/usr/local/php-5.2.5--with-config-file-path=/etc --enable-と、打った後にchmod 744 /usr/local/php-5.2.5と、したいときに有効• スタックなので 2 重 3 重に格納することも可能
10
その他便利な機能 - コマンド• コマンドシェルのミススペルを指摘setopt correct• cd 打つのがメンドクサイsetopt auto_cd• 勝手に pushdsetopt auto_pushd• ディレクトリスタック内をユニークに保
つsetopt pushd_ignore_dups
11
その他便利な機能 - スクリプト処理
• data000 ~ data255 というファイル作成touch data{000..255}• sample.sql 以外の sql ファイル削除rm *.sql~sample.sql• カレント以下のシンボリックリンク削除rm **/*(@)
12
screen
• GNU screen• 1 つの端末から複数の端末を仮想的に同時
に扱えるようになる• 主な機能
– 同時に複数の端末を扱えるようになる– バックスクロールでログが見れ、コピペもで
きる– 柔軟な接続機能
13
うれしい機能• バックスクロール• autodetach
– セッション終了時にプロセスをバックグラウンドへ
– 突然回線が切れても大丈夫– 1 プロセスに複数 attach も可能なので、違う端
末からでも全く同じ環境での作業が可能になる• 画面分割
– vim や emacs のように仮想ターミナルを水平分割
– なんちゃってデュアルディスプレイ14
.screenrc ( 設定ファイル )escape ^z^zhardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
autodetach onstartup_message off
# copy mode 時のバッファ量を設定defscrollback 3000scrollback 3000
term xterm-256colormarkkeys "h=^B:l=^F:$=^E"
# ウィンドウ分割設定bind -c REGION 2 splitbind -c REGION 1 onlybind -c REGION 0 removebind -c REGION o focusbind -c REGION ^ resizebind x command -c REGION
15
vim• テキストエディタ
– Unix系 OS には大抵標準で入ってます• 主な機能
– マルチバッファ– ウィンドウ分割– 動的単語補完– 400 以上の文法に対応した highlighting– 40 以上の言語に対応したオートインデント– ctags を利用したタグジャンプ–独自スクリプト実装 (vim script)
16
vim の問題点
• 操作が変態的– hjkl で移動– さまざまなモード ( normal, visual, insert )
• どうやって習得するか–チュートリアルモードが用意されている– vimtutor とタイプするといきなり開始– 日本語で良いチュートリアルだと思うのでオ
ススメ
17
基本操作 - モード
• 3種類のモード–ノーマルモード
• デフォルトモード• カーソル移動、文字の編集、コマンド入力
– インサートモード• 文字を挿入
–ビジュアルモード• 文字を範囲選択
18
ノーマル
インサート
ビジュアル
基本操作 - カーソル移動
19
カーソル移動
h ←
j ↓
k ↑
l →
0 行頭にジャンプ
$ 行末にジャンプ
^ 行の最初の文字へジャンプ
H 表示画面の 1行目へジャンプ
M 画面中央へジャンプ
L 表示画面の最下行へジャンプ
% 対応する括弧へジャンプ
gg ファイルの先頭へジャンプ
G ファイルの末尾へジャンプ
gj 表示行下に移動
gk 表示行上に移動
基本操作 - 編集
編集
x 1文字切り取り
dd カーソル行を切り取り
yy カーソル行をヤンク
D カーソル位置から行末を切り取り
p カーソルの後ろに貼り付け
P カーソルの前に貼り付け
J 行連結 ( インデントは削除 )
gJ 行連結 ( 空白はそのまま )
~ 大文字 /小文字を切り替える
>>, << カーソル行をインデント , 逆インデント
<C-a>,<C-x>
カーソル位置の数字の加減
u アンドゥ
<C-r> リドゥ
:w[!] [file] 上書き保存 (! を付けると readonly でも上書き保存、file名指定の場合は名前を付けて保存 )
:q[!] 終了 (! を付けると変更点があっても保存せず強制終了 )
20
基本操作 - インサートモード
インサートモード
i カーソルの前からインサート
I カーソル行の行頭からインサート
a カーソルの後ろからインサート
A カーソル行の行末からインサート
o カーソル行の下に新しい行を作りインサート
O カーソル行の上に新しい行を作りインサート
21
ここで軽くまとめると•操作がパズル的•突き詰める楽しさがある
基本操作 - ビジュアルモード
ビジュアルモード
v 文字単位のビジュアルモード
V 行単位のビジュアルモード
<C-v> 矩形ビジュアルモード
gv 最後に利用したビジュアルモードを復元
22
•ビジュアルモードと編集を組み合わせると非常に強力
•コピペ•カット & ペースト•置換•範囲置換
範囲を選択後、「 :s/foo/bar 」で範囲置換
基本操作 - その他
検索
/keyword keyword を検索
n 次の候補に移動
N 前の候補に移動
置換
:%s/from/to/[g] 全行に対してパターンマッチング (gを付けると複数マッチ )
:m,ns/from/to/[g] m 行目から n 行目の範囲に対してパターンマッチング
画面分割
:sp 画面を水平に分割
:vs 画面を垂直に分割
<C-w>[h,j,k,l] 分割したウィンドウ間を移動
:only カーソルがあるウィンドウ以外を閉じる
ファイル操作
:e [file] file を開く
ZZ 保存して閉じる
:ls バッファ一覧を表示
:bn, :bp バッファ間を前後に移動
ヘルプ :h [command] command のヘルプを表示
23
単語補完機能
• インサートモード時に利用可能
24
キーワード補完 <C-x C-n>, <C-x C-p>
開いているバッファ内から補完
タグ補完 <C-x C-]> ctags ファイルによる補完
ファイル名補完 <C-x C-f> ファイル名による補完
コマンドライン補完 <C-x C-v> vim のコマンドラインから補完
行全体補完 <C-x C-l> バッファ内から行全体による補完
オムニ補完 <C-x C-o> インテリジェンスな補完
テキストオブジェクト
• テキストのオブジェクト単位で選択–ビジュアルモードで主に利用–ノーマルモードで編集コマンドと組み合わせ
る
25
テキストオブジェクト i 対象の内側のオブジェクトを選択
a 対象を含んだオブジェクトを選択
ip パラグラフ単位で選択
di 対象の内側のオブジェクトを削除
it タグの内側のオブジェクトを選択
テキストオブジェクトの便利な例
• i$this->setAttribute('error', ' エラーです ');
() 内にカーソルがある状態で vi$this->setAttribute('error', ' エラーです ');
• dit<h2>PHOTOHITO へようこそ </h2>
<h2> タグ内にカーソルがある状態で dit<h2></h2>
26
vim プラグイン
• 機能拡張するための仕組み– 中身は vim スクリプトで記述– vim起動時にオートロードされる– Firefox Extension みたいなもの
• 種類は 2 つ– グローバルプラグイン
• 全種類のファイルで利用される
– ファイルタイププラグイン• 特定ファイルのみで利用される
• 公式サイトで公開されている27
minibufexpl.vim
• タブエディタ風にバッファを管理– vim デフォルトのバッファ管理は貧弱
• 配布元– http://www.vim.org/script.php?script_id=159
• 設定:let g:miniBufExplMapWindowNavVim = 1:let g:miniBufExplMapWindowNavArrows = 1:let g:miniBufExplMapCTabSwitchBuffs = 1
28
surround.vim
• テキストオブジェクト操作を拡張• 配布元
– http://www.vim.org/scripts/script.php?script_id=1697
• 拡張されたところ– 対象とする文字列自体を削除したり置換
• ds, cs, ys, vs というコマンド
–囲っている HTML タグ自体を削除したり置換– インサートモードから使える
• <C-G>S で利用29
fuzzyfinder.vim
• あいまい検索ファイルエクスプローラ–部分検索一致も可能
• 配布元– http://vim.g.hatena.ne.jp/keyword/fuzzyfinder.vim
• 検索モード– ファイルモード– MRUモード (MRU = Most Recently Used)– タグモード– ディレクトリモード
30
autocomplpop.vim
• キーワード補完を自動でポップアップ– デフォルトだと都度 <C-n> を押す必要がある
• 配布元– http://hiki.ns9tks.net/?autocomplpop.vim
• 便利な点– 自動でポップアップ– ファイル名補完と Ruby のオムニ補完にも対
応
31
commentout.vim
• 範囲選択した箇所をコメントアウト– いろんなコメントフォーマットに対応
• 配布元– http://nanasi.jp/articles/vim/commentout_source.html
• 対応してる代表的なコメントフォーマット– #– <!-- -->– //– >– %– -
32
ご清聴ありがとうございました
http://photohito.com/ もよろしくお願いします
33