2013/08/15 (木)
vim ファイル・バッファ・画面分割・タブ操作 まとめ


・ファイルを開く (edit系コマンド)
キー操作 動作
:edit hoge.txt
:e hoge.txt
hoge.txtを開く。eはeditの短縮形。
:edit! hoge.txt 編集中ファイルの変更を破棄してhoge.txtを開く
:hide edit hoge.txt 編集中ファイルを隠してhoge.txtを開く
:edit . こうするとファイルエクスプローラが起動する
:edit /home/hoge/とかもできる

初期設定のvimは編集中のファイルを開きながら、別ファイルを開くことができない。
複数ファイルを同時編集するには、いったん
:write
で編集中ファイルを保存するか
:edit!
として変更を破棄するか
:hide edit foo.txt
として明示的に編集中ファイルを隠して切り替える必要がある。

ファイルを切り替える際、自動で保存するオプションとして
:set autowrite
自動で:hideを付加するオプションとして
:set hidden
がある。
特にhiddenオプションは、ほとんどのユーザが有効にしているだろう。
hiddenを使うことで複数ファイルをスムーズに編集できるようになる。
下記のnext系コマンドやbuffer系コマンドでも有効なオプションである。


・ファイルを切り替える (next系コマンド)
キー操作 動作
:next
:n
複数ファイルを編集中、編集対象を次のファイルに切り替える
nはnextの短縮形
:previous
:Next
:N
前のファイルに切り替える
:first 先頭のファイルに切り替える
:last 末尾のファイルに切り替える
:next hoge.txt 編集中のファイルをhoge.txtに切り替える
TABキーを連打してみると良いかも
:next #
Ctrl-^
前回編集ファイルに切り替え
:filesをしてみると#がついているファイル
:next #3
3Ctrl-^
編集中のファイルを番号に切り替える
番号は:filesに対応する
:wnext 現在のファイルを保存してから次のファイルに切り替える


・ファイル操作その他
キー操作 動作
:files
:ls
開いているファイル(バッファ)一覧を表示
:args 開いているファイル(バッファ)一覧を簡易表示
:read hoge.txt
:r hoge.txt
カレント行にhoge.txtを読み込む
:edit . ファイルエクスプローラとして使える
:e ~TABキー とかも便利
:Explore[!] ファイルエクスプローラを起動
:Hexplore[!] 水平分割してファイルエクスプローラを起動
:Rexplore[!]
:Sexplore[!]
:Texplore[!]
:Vexplore[!] 垂直分割してファイルエクスプローラを起動


・バッファ切り替え (buffer系コマンド)
キー操作 動作
:buffers バッファリストを表示する
bdeleteで削除されたバッファは表示されない
:filesや:lsと同じ
:buffers! 全てのバッファを表示する
:bdeleteされたバッファが表示される
:bnext
:bn
次のバッファに切り替える
:bprevius
:bp
:bNext
:bN
前のバッファに切り替える
:bfirst
:bf
:brewind
:br
先頭のバッファに切り替える
:blast
:bl
末尾のバッファに切り替える
:bdelete
:bd
現在のバッファをリストから削除する
:bwipeout
:bw
現在のバッファを完全に削除する
:buffer 3 指定のバッファに切り替える
:buffer hoge.txt 指定のバッファ(曖昧表現可)に切り替える
TABを連打すると良い
:sbuffer hoge 分割して指定のバッファに切り替える
:sbnext 分割して次のバッファに切り替える
:bdelete 3 指定のバッファをリストから削除する


・ウィンドウ分割系
キー操作 動作
:split
:sp
Ctrl-w s
横分割
:vsplit
:vs
Ctrl-w v
縦分割
:ball
:ba
すべてのファイルをウィンドウで開く
Ctrl-w [wW] カーソルをウィンドウ間で次々と移動
Ctrl-w [hjklp] カーソルをウィンドウ間で移動
Ctrl-w [tb] カーソルを一番上(下)のウィンドウに移動
Ctrl-w p
:only
Ctrl-w o
カーソルがあるウィンドウのみにする
:close
Ctrl-w c
カーソルがあるウィンドウを閉じる
Ctrl-w q カーソルがあるウィンドウを終了する?
:new
Ctrl-w n
横分割して新規バッファを作成
:vnew 縦分割して新規バッファを作成
Ctrl-w [HJKL] ウィンドウを移動
Ctrl-w [rR] ウィンドウをスワップ
Ctrl-w [+-] ウィンドウの高さを変更
{数値}Ctrl-w _ ウィンドウの高さを指定
Ctrl-w = 全てのウィンドウサイズを同じにする


・タブ操作
キー操作 動作
vim -p 1.txt 2.txt ファイルをタブで開く
g[tT]
tabnext, tabprevious
左、右のタブに移動
:tabonly 現在のタブ以外を閉じる
:tabclose タブを閉じる
:tabnew 新しいタブを開く
:tabmove タブを移動する
:tabfirst 最初のタブに移動
:tablast 最後のタブに移動
:tabs タブを選択する


・共通操作
キー操作 動作
qall
qa
全て閉じる
wqall 全て保存して閉じる
2011/11/11 (金)
vncconfig -nowin &してもクリップボードの共有ができない謎が解決した。

結論から言うと、vnc4serverを使ったら解決した。

windowsからvncviwerで ubuntu 10.04 + tightvnc + gnome 環境に接続すると なぜかクリップボードが共有できなかった。

でもgnome上で起動したxtermの端末とのクリップボードを共有できる。

たぶんgnomeのクリップボードが特殊機能をもっていて、
ふつうのクリップボードと異なる仕様が悪さをしているのだろうかと勝手に思っていたが、どうなのだろう。

tightvncではなく、vnc4serverにしたらクリップボードの共有ができた。

gnomeとtightvnc間の相性のバグなのだろうか。
2011/10/30 (日)
いまさらrsyncの便利さに気づいた。
rsyncコマンド自体の存在は以前から知っていたのだけれど、
なんとなく手動でcpしていたという。。。

% rsync -av --delete src bak_dir

がお気に入り。
これで、srcディレクトリ以下の内容が、bak_dir/src以下にコピーされる。
srcディレクトリ内のファイルを変更・追加・削除してrsyncすると同期がとれる。
2011/09/28 (水)
ずっと原因がわからず悩んでいた。

.viminfoを消したら回復した。
2011/09/19 (月)
Linuxサーバというのは、何人ものユーザが同時にログインして何かしらの作業をするもの。
Linux環境に慣れている人は当然知っていると思うが、
そこで他人がどういうプロセスを動かしどれだけの負荷をサーバに与えているかなどが、
コマンド一つで簡単にわかってしまう。

興味半分というか何というか、他人が今何しているか見てみるのも面白いかも。
そんなコマンド達を紹介してみようと思う。

・whoコマンド、wコマンド
そのサーバにログインしている人を表示する。
IDLEの項目を見ると、何分前まで作業しているかどうかもわかる。
0.00sとかになってるのは、今まさに作業をしている状態。
ずーっと見てると他人の仕事の頑張り度合いがわかる。
-fオプション指定(または指定なし)でどこのマシンからログインしているかもわかる。
自宅からアクセスしていいたりすると、その人が使ってるIPやプロバイダ等が見える。

・psコマンド
プロセスを調べるためのコマンド(常識)。
% ps aux | grep [ユーザ名]
とかやると、その人のプロセス全てが表示される。

・topコマンド
そのサーバで走っているプロセスを負荷が高い順に表示する。
重いシュミレーションやEDAツールを使うような現場では、
ログインしたらまずはtopしてそのマシンで他人が負荷をかけてないかを調べる風習があるらしい。
CPUの物理コア数以上100%のプロセスをまわすと、サーバが過負荷になってスループットが極端に落ちるので気をつけたい。

・lastコマンド
そのサーバへのユーザのログイン履歴を表示する。
ついでにアクセス元のIP等も表示される。
ずーっと見ていくと、頻繁にログイン・ログアウトを繰り返している頑張ってる人が見えてくる。

怪しい攻撃を受けたら、まずはlastコマンドで履歴を見るというのが常套手段。
rootならその後/varの下を見て詳細を調べる。
ちなみに、Linux系サーバでsshの引数でコマンドを1回実行するような形でログインすると、
lastの履歴に残らない(Unix系は残る)。
これを使ってイタズラができる。でも/varを見られるとバレる。

・fingerコマンド
rootがちゃんと管理している環境でのみだが
% finger [ユーザ名]
とやるとユーザの登録情報が表示される。
ユーザの氏名や部署、使用しているシェルなどが出てくる場合もある。
氏名はわかるけどユーザ名がわからないときに便利かも(そんな状況はあまりないか)。
% cd /home
% finger * | grep -i yamada
みたいな感じ。
ちなみにUnix系だとfinger @[ホスト名]
でユーザのログイン状況が見える。
w,やwhoを使えばいい話だが、他サーバから実行してもlastの履歴に残らないという特性がある。
Linux系だとセキュリティの関係でデフォルトオフである。

・writeコマンド
言わずと知れた最強いたずらコマンド。
他人にメッセージを送りつけることができる。
リダイレクトを使うことでアスキーアートも送信もできる。ハマる。
でも、やりすぎるとmesg nされる。



他にもいろいろあった気がするが、今は思い出せない。

ちょっと頭を使うと、多数のサーバがある環境ではwhoやtopの結果を持ってきて、
特定のユーザやIDLE時間、CPU使用率を抽出して全サーバの状態を一気に調べる
シェルスクリプトも割りと簡単に作れてしまう。
負荷の低いマシンを調べるときなどに超便利。