linuxにおける開発環境

33
1 社社社社社社社 Linux 社社社社社社社社2008/02/27 Tomohiro MITSUMUNE (a.k.a. Kiske)

Upload: tomohiro-mitsumune

Post on 31-Oct-2014

17 views

Category:

Education


9 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Linuxにおける開発環境

1

社内技術勉強会「 Linux における開発環境」

2008/02/27 Tomohiro MITSUMUNE

(a.k.a. Kiske)

Page 2: Linuxにおける開発環境

本日のアジェンダ

• 開発環境について• Linux での開発環境

–zsh–screen–vim (or Emacs)

2

Page 3: Linuxにおける開発環境

開発環境• GUI (Windows)

– マウス操作を主体とした直感的な操作– 文字だけでなく画像を利用し、動作を明確化– インストールしてすぐ使える– 設計で想定されたことしかできない– 重い、遅い

• CUI (Unix, Linux)– 覚える事が多くて、敷居が高い– 多くのことを自分で設定する必要がある– 軽い、早い

3

Page 4: Linuxにおける開発環境

Windows>Linux での開発環境の問題

• シームレスな開発ができない– Windows 側でコード修正– scp, sftp, svn とかで Linux 側にアップロード– 変更の度に deploy 作業が生じるため、効率悪

• 文字エンコード , 改行コードの違い– アップロード後に「動かねー」と叫ぶ理由の

1 つ

4

Page 5: Linuxにおける開発環境

Linux での開発

• Linux 環境での開発効率向上アイテム– zsh– screen– vim (or Emacs)

• 開発効率が上がると– 早く帰れる– 友人 / 家族 / 恋人と団欒– 趣味の時間

リア充への第一歩!5

Page 6: Linuxにおける開発環境

zsh

• Unix のコマンドシェルの 1 つ• bash + tcsh + ksh = 「究極のシェル」• 主な機能

– コマンド補完機能– プロンプト表示– スペル修正機能– コマンドラインスタック– 拡張されたファイル選択

• 参考記事 [http://journal.mycom.co.jp/column/zsh]

6

Page 7: Linuxにおける開発環境

autocomplete• コマンド自動補完autoload –U compinitcompinit• さまざまなコマンド補完に対応

– シェルコマンド ( ls, tar, diff, etc…)– ソフトウェア ( apache, php, ruby, etc…)

• 自分でコマンド補完リストも作成可能

7

Page 8: Linuxにおける開発環境

プロンプト表示• RPROMPT

– コマンドライン右側に出るプロンプト– カレントディレクトリとか出すと便利– コマンドが長くなってくると勝手に消える

local GREEN=$'%{\e[1;32m%}'local BLUE=$'%{\e[1;34m%}'local DEFAULT=$'%{\e[00;m%}‘PROMPT=$BULE'[${USER}@${HOSTNAME}] %(!.#.$)

'$DEFAULTRPROMPT=$GREEN'[%~]'$DEFAULT

8

Page 9: Linuxにおける開発環境

グローバルエイリアス• コマンドライン上の全ての要素をエイリアス

として展開– 通常のエイリアスは第 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

Page 10: Linuxにおける開発環境

コマンドラインスタック• 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

Page 11: Linuxにおける開発環境

その他便利な機能 - コマンド• コマンドシェルのミススペルを指摘setopt correct• cd 打つのがメンドクサイsetopt auto_cd• 勝手に pushdsetopt auto_pushd• ディレクトリスタック内をユニークに保

つsetopt pushd_ignore_dups

11

Page 12: Linuxにおける開発環境

その他便利な機能 - スクリプト処理

• data000 ~ data255 というファイル作成touch data{000..255}• sample.sql 以外の sql ファイル削除rm *.sql~sample.sql• カレント以下のシンボリックリンク削除rm **/*(@)

12

Page 13: Linuxにおける開発環境

screen

• GNU screen• 1 つの端末から複数の端末を仮想的に同時

に扱えるようになる• 主な機能

– 同時に複数の端末を扱えるようになる– バックスクロールでログが見れ、コピペもで

きる– 柔軟な接続機能

13

Page 14: Linuxにおける開発環境

うれしい機能• バックスクロール• autodetach

– セッション終了時にプロセスをバックグラウンドへ

– 突然回線が切れても大丈夫– 1 プロセスに複数 attach も可能なので、違う端

末からでも全く同じ環境での作業が可能になる• 画面分割

– vim や emacs のように仮想ターミナルを水平分割

– なんちゃってデュアルディスプレイ14

Page 15: Linuxにおける開発環境

.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

Page 16: Linuxにおける開発環境

vim• テキストエディタ

– Unix系 OS には大抵標準で入ってます• 主な機能

– マルチバッファ– ウィンドウ分割– 動的単語補完– 400 以上の文法に対応した highlighting– 40 以上の言語に対応したオートインデント– ctags を利用したタグジャンプ–独自スクリプト実装 (vim script)

16

Page 17: Linuxにおける開発環境

vim の問題点

• 操作が変態的– hjkl で移動– さまざまなモード ( normal, visual, insert )

• どうやって習得するか–チュートリアルモードが用意されている– vimtutor とタイプするといきなり開始– 日本語で良いチュートリアルだと思うのでオ

ススメ

17

Page 18: Linuxにおける開発環境

基本操作 - モード

• 3種類のモード–ノーマルモード

• デフォルトモード• カーソル移動、文字の編集、コマンド入力

– インサートモード• 文字を挿入

–ビジュアルモード• 文字を範囲選択

18

ノーマル

インサート

ビジュアル

Page 19: Linuxにおける開発環境

基本操作 - カーソル移動

19

カーソル移動

h ←

j ↓

k ↑

l →

0 行頭にジャンプ

$ 行末にジャンプ

^ 行の最初の文字へジャンプ

H 表示画面の 1行目へジャンプ

M 画面中央へジャンプ

L 表示画面の最下行へジャンプ

% 対応する括弧へジャンプ

gg ファイルの先頭へジャンプ

G ファイルの末尾へジャンプ

gj 表示行下に移動

gk 表示行上に移動

Page 20: Linuxにおける開発環境

基本操作 - 編集

編集

x 1文字切り取り

dd カーソル行を切り取り

yy カーソル行をヤンク

D カーソル位置から行末を切り取り

p カーソルの後ろに貼り付け

P カーソルの前に貼り付け

J 行連結 ( インデントは削除 )

gJ 行連結 ( 空白はそのまま )

~ 大文字 /小文字を切り替える

>>, << カーソル行をインデント ,  逆インデント

<C-a>,<C-x>

カーソル位置の数字の加減

u アンドゥ

<C-r> リドゥ

:w[!] [file] 上書き保存 (! を付けると readonly でも上書き保存、file名指定の場合は名前を付けて保存 )

:q[!] 終了 (! を付けると変更点があっても保存せず強制終了 )

20

Page 21: Linuxにおける開発環境

基本操作 - インサートモード

インサートモード

i カーソルの前からインサート

I カーソル行の行頭からインサート

a カーソルの後ろからインサート

A カーソル行の行末からインサート

o カーソル行の下に新しい行を作りインサート

O カーソル行の上に新しい行を作りインサート

21

ここで軽くまとめると•操作がパズル的•突き詰める楽しさがある

Page 22: Linuxにおける開発環境

基本操作 - ビジュアルモード

ビジュアルモード

v 文字単位のビジュアルモード

V 行単位のビジュアルモード

<C-v> 矩形ビジュアルモード

gv 最後に利用したビジュアルモードを復元

22

•ビジュアルモードと編集を組み合わせると非常に強力

•コピペ•カット & ペースト•置換•範囲置換

範囲を選択後、「 :s/foo/bar 」で範囲置換

Page 23: Linuxにおける開発環境

基本操作 - その他

検索

/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

Page 24: Linuxにおける開発環境

単語補完機能

• インサートモード時に利用可能

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> インテリジェンスな補完

Page 25: Linuxにおける開発環境

テキストオブジェクト

• テキストのオブジェクト単位で選択–ビジュアルモードで主に利用–ノーマルモードで編集コマンドと組み合わせ

25

テキストオブジェクト i 対象の内側のオブジェクトを選択

a 対象を含んだオブジェクトを選択

ip パラグラフ単位で選択

di 対象の内側のオブジェクトを削除

it タグの内側のオブジェクトを選択

Page 26: Linuxにおける開発環境

テキストオブジェクトの便利な例

• i$this->setAttribute('error', ' エラーです ');

() 内にカーソルがある状態で vi$this->setAttribute('error', ' エラーです ');

• dit<h2>PHOTOHITO へようこそ </h2>

<h2> タグ内にカーソルがある状態で dit<h2></h2>

26

Page 27: Linuxにおける開発環境

vim プラグイン

• 機能拡張するための仕組み– 中身は vim スクリプトで記述– vim起動時にオートロードされる– Firefox Extension みたいなもの

• 種類は 2 つ– グローバルプラグイン

• 全種類のファイルで利用される

– ファイルタイププラグイン• 特定ファイルのみで利用される

• 公式サイトで公開されている27

Page 28: Linuxにおける開発環境

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

Page 29: Linuxにおける開発環境

surround.vim

• テキストオブジェクト操作を拡張• 配布元

– http://www.vim.org/scripts/script.php?script_id=1697

• 拡張されたところ– 対象とする文字列自体を削除したり置換

• ds, cs, ys, vs というコマンド

–囲っている HTML タグ自体を削除したり置換– インサートモードから使える

• <C-G>S で利用29

Page 30: Linuxにおける開発環境

fuzzyfinder.vim

• あいまい検索ファイルエクスプローラ–部分検索一致も可能

• 配布元– http://vim.g.hatena.ne.jp/keyword/fuzzyfinder.vim

• 検索モード– ファイルモード– MRUモード (MRU = Most Recently Used)– タグモード– ディレクトリモード

30

Page 31: Linuxにおける開発環境

autocomplpop.vim

• キーワード補完を自動でポップアップ– デフォルトだと都度 <C-n> を押す必要がある

• 配布元– http://hiki.ns9tks.net/?autocomplpop.vim

• 便利な点– 自動でポップアップ– ファイル名補完と Ruby のオムニ補完にも対

31

Page 32: Linuxにおける開発環境

commentout.vim

• 範囲選択した箇所をコメントアウト– いろんなコメントフォーマットに対応

• 配布元– http://nanasi.jp/articles/vim/commentout_source.html

• 対応してる代表的なコメントフォーマット– #– <!-- -->– //– >– %– -

32

Page 33: Linuxにおける開発環境

ご清聴ありがとうございました

http://photohito.com/ もよろしくお願いします

33