2011年02月22日

レジスタを使った文字列のコピー(Vim)

URL:vimエディタからクリップボードを利用する。 − 名無しのvim使い  http://nanasi.jp/articles/howto/editing/clipboard.html

 これも余り使わないので、すぐに忘れてしまいます。
$pop_server = 'localhost';
 この場合、localhostの部分をコピーしたいとすると、lの位置でv、続けてt’とやって範囲を指定し、"ayでレジスタaに記録されるみたいです。
 入力モードで Control-r {レジスタの名前}とやると、簡単に貼り付けができるみたいです。これは知らなかったのか、余り使った記憶がないです。他にプラグインで動的略語展開をやっているので、単語単位のコピペはほとんど使わないということもありました。Emacsでもレジスタはほとんど使わないので、使い方もすぐに忘れてしまうのですが、この方法だとクリップボードマネージャを使うより、手早く使い甲斐があるかもしれないです。



posted by 廣野秀樹 at 05:18| Comment(0) | TrackBack(0) | Vim | このブログの読者になる | 更新情報をチェックする

マークを使った文字列の編集(Vim)

URL:howto use vi 13 ( UNIX Operation I )  http://www.not-enough.org/abe/manual/unix1/howto-vi13.html

 余り使わないので、時間が経つと忘れてしまいます。
 mの後にa-zA-Zの1文字を入れると、その1文字がマークとして設定されます。maとすればaという名前のマークが設定されたことになります。

 例えば、次の文字列を対象に編集したい場合、
 $proxy_host = 'proxy.example.com';
 'proxy.example.com';の先頭のpの位置でmaとマークを設定し、'の位置まで移動し、y`aとやると、proxy.example.comという文字列がコピーされたことになります。ただし、クリップボードに入ったわけではないです。実行中のvimのバッファに記録されているだけだと思います。貼り付けはpもしくはPです。

 自分の場合は、fと組み合わせで使うことが多いです。 'proxy.example.com';の場合だと、pの位置でmaとマークすると続けてf’とやります。すると自動的に’の位置までカーソルが移動します。初めに見つかる’まで移動するというコマンドですが、続けて;とやると同じ行の次の候補位置まで移動します。なお、「,」とやると手前の位置までもどります。

 プログラムの編集では””や’’の中の文字列の部分だけ編集することが多いと思います。こういう場合は、c`aとやると’’内の文字列がカットされ、入力モードに切り替わって、違った文字列を打ち込める状態になります。

  ' (クォート) を使った場合は、行単位の編集になるみたいです。自分は` (バッククォート) を使って指定範囲を編集することが多いです。

 行をまたいだより大きな範囲を編集する場合は、:'a,.cとやることもできます。:はコマンド入力の始まり(EXモードとも言ったかもしれないです。)、'aがマーク開始行の指定、.が現在カーソルがある行の指定、cが編集置換です。cをdに変更すれば指定範囲の削除になります。

 マークはカーソル位置の移動にも便利です。`aとだけやれば、いつでもaマークの位置にジャンプできます。マークの数も52個設定できるそうです。全てのマーク位置を確認するコマンドもありますし、マーク位置を表示するプラグインもあります。

 マークは便利ですが、ちょっとしたコピペだと、マウスの範囲選択を使うことが多いです。Linuxだとセレクションと言って、直前に範囲選択した文字列の内容を、中ボタンクリックだけで貼り付けることが出来るからです。クリップボードとは異なりますが、慣れないと戸惑うことが多いかもしれないです。クリップボードマネージャを使うと、セレクションとクリップボードを同期させることも出来るみたいですが、自分はそんな使い方はしたことないです。



 

posted by 廣野秀樹 at 04:57| Comment(0) | TrackBack(0) | Vim | このブログの読者になる | 更新情報をチェックする

2010年07月19日

Vimスクリプトの参考になるコード

http://www.ibm.com/developerworks/jp/linux/library/l-vim-script-2/

function SaveBackup ()
let b:backup_count = exists('b:backup_count') ? b:backup_count+1 : 1
return writefile(getline(1,'$'), bufname('%') . '_' . b:backup_count)
endfunction

nmap :call SaveBackup()

 短いコードだけど、結構参考になる。関数の定義はfunctionで行うらしい。letはEmacs-Lispでも使うけどローカル変数の宣言だろう。
 b:backup_counというのはバッファスコープの宣言というか指定らしい。existsという関数で変数が定義済みか調べ、三項演算子を使って、返却値を振り分けている。よくあるやり方。

 returnは関数が返す返却値。getline(1,'$')でバッファの1行目から最終行まですべてを書き込みデータとして指定しているらしい。

 writefileという関数はよく見ると引数が二つしかない。第一引数に書き込みデータの範囲指定。第2引数が保存するファイル名か。

 bufname('%')でバッファ名を取得しているようだが、これがそのままファイル名になっている様子。.は文字列連結演算子になっている様子。つまりファイル名の末尾に_と関数を読み出した回数の数値を付け加えている。
タグ:vim
posted by 廣野秀樹 at 00:34| Comment(0) | TrackBack(0) | Vim | このブログの読者になる | 更新情報をチェックする