Shell

Screen

ターミナルの拡張?みたいなやつ
Emacsとscreenとzshは人生に必須です。
emacsのelscreenみたいな操作。たぶん、elscreenがscreenに似てるのかも。
すべてC-aのコマンドから始まるけど、C-aを使えなくなってじゃまなんでC-zとかに変更。
C-tとかにする人が多いらしいですが、単語うち間違えが多い自分はC-tってよく使うのでローカルのscreenはC-z,リモートのscreenはC-uとしています。 emacsのelscreenとおなじコマンドにしておくと覚えやすくてよろし。
設定ファイルは~/.screenrc

$ sudo emacs ~/.screenrc
 
defencoding utf-8
escape ^u^u
defshell /usr/local/bin/zsh
vbell off
autodetach on
startup_message off
defscrollback 10000
defhstatus I^En:^EtI
hardstatus off
hardstatus alwayslastline "%`%-w%{=b mw}%n %t%{-}%+w"
bind 2 split
bind o focus
bind 1 only
bind 0 remove

screenの起動はshellから

$ screen

で起動

コマンド  動作
C-z C-c 新規ウィンドウ作成
C-z C-n,C-z C-p ウィンドウ移動
C-z C-k 現在のウィンドウを消す
C-z esc,C-z C-[ コピー/スクロールバックモードに入る。
C-z d デタッチ
C-z r [pid] アタッチ
screen -ls デタッチ一覧
C-z [ コピーモード
コピーモード中にesc コピーモード終了
コピーモード中にspace コピー範囲のマーク、確定
C-z ] ペースト
C-z ? へるぷみー

デタッチ、アタッチ(detache,atache)

いくつwindowを起動しているかとか何を動作させているかとかの状態を保ったまま、screenを終了させるのがデタッチ。 デタッチした状態にまた接続することがアタッチ。

これがあると会社からリモート接続しているサーバ上のscreenでいくつもwindow出して作業していても帰るときデタッチしといて、 家帰ってアタッチすればまた同じ状態から続けられるのです。すばらしすぎです。

デタッチはC-z dです。[detached]と表示されるはずです。 デタッチされてるscreen一覧は screen -lsでみれます。

$ screen -ls
 
There is a screen on:
        pid.tty.host       (Detached)
1 Socket in /tmp/uscreens/S-user.

アタッチするときは

$ screen -r [pid]

ですが、デタッチしているのが1個だけのときは引数なしで

$ screen -r

でアタッチできます。

コピーモード

これも便利。 windowの内容を別のwindowにコピーしたいときにマウスを使ってコピペする必要がありません。

順序は

  1. C-z [ (コピーモード開始)
  2. viキーバインドで移動
  3. spaceでマークセット
  4. spaceでコピー終了位置確定
  5. 別のwindowなんかに移動してC-z ]でペースト
  6. esc (コピーモード終了)

となります。コピーモードは単純にバッファをさかのぼりたいときにも使えます。

コピーモード中によく使いそうなviキーバインド

動作 説明
C-u 半ページ上に移動
C-d 半ページ下に移動
C-b 1ページ上に移動
C-f 1ページ下に移動
/[search] 下方向に検索
?[search] 上方向に検索
n 検索続ける
N 逆方向に検索続ける

zsh

最強のしぇる。らしい。覚えることいっぱい
killでpidを調べなくてもtab補完でlistがでたりプロセス名を自動でpidに変換してくれたりします。
古いzshは変なのでここから最新(devel)をダウンロードします。

.zshrc

LANG=ja_JP.UTF-8
 
autoload -U compinit
compinit 
 
PATH=/opt/local/bin:/opt/local/sbin/:$PATH
 
## history
HISTFILE="$HOME/.zhistory"
HISTSIZE=100000
SAVEHIST=100000
setopt extended_history
setopt hist_ignore_dups
setopt share_history
function history-all { history -E 1 }
 
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end
 
## 補完時に大小文字を区別しない
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' menu select=1
 
##cdなしのディレクトリ名だけで移動
setopt auto_cd
##cd -[tab]で移動履歴表示
setopt auto_pushd
##間違えたコマンドを修正
setopt correct
##補完候補をつめて表示
setopt list_packed
##ピープ音をoff
setopt nolistbeep
# no remove postfix slash of command line
#
setopt noautoremoveslash
 
## emacs key bind
bindkey -e
 
#default editor
EDITOR=vim
VISUAL=$EDITOR
export EDITOR VISUAL
alias editor=$EDITOR
 
#zshにあるデフォルトのテーマを使う
autoload promptinit
promptinit
prompt adam2
 
export LANG PATH
 
## alias
alias l='ls -lA'
alias ll='ls -lA | less'
 
## Carbon Emacs                                                                                                                             
[[ $EMACS = t ]] && unsetopt zle
 
if [[ $EMACS = t ]]; then
    prompt off
    PROMPT="%n@%m:%/%^[$ "
fi

ついでにemacsのピープ音の消しておくと静かになります
.emacs.elかなんかに

(setq visible-bell nil)

【bindkey -e】時のEmacs風コマンド

ショートカットキー 動作
C-a 行頭へジャンプ
C-e 行末へジャンプ
C-f 一文字前進
C-b 一文字後退
C-y 貼付け
C-x u, C-_ Undo
C-space リージョンの先頭をマーク
C-w リージョンを削除(切り取り)
Esc w リージョンをコピー
C-k カーソル位置から行末まで削除
C-d カーソル位置を削除(del)
C-h カーソル位置の一つ後ろを削除(backspace)
C-p ↑と同じ
C-n ↓と同じ
C-l 画面を表示し直して、現在行を画面中央に
C-i tabと同じ

ヒストリ系なコマンド

ショートカットキー 動作
C-r インクリメンタルサーチ
C-p ヒストリの一つ前
C-n ヒストリの一つ次
M-p 入力したコマンドで始まるヒストリ履歴のみでC-p
M-n 入力したコマンドで始まるヒストリ履歴のみでC-n
C-o Enterのかわりに使うとヒストリの次のコマンドが自動で入力される

変な警告

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

こんなのがでてきたら。

$ compaudit

ってコマンドを入力するとパーミッションが正しくないフォルダが一覧表示される。ので。
それらを全部 chmod -R 755 する。

development_tool/shell.txt · 最終更新: 2013/11/28 16:41 by eiji