2008/11/15

vim/emacsで文字コード(と改行コード)を変更する方法

vimやemacsで日本語が含まれる文章を編集する際に、どこかで調べてはいつも忘れてしまうのでここにメモします。

vim

こちらのページに欲しいものズバリの設定と、それについて詳細な解説がありました。

viで日本語の文字コードを自動判別 - 玉虫色に染まれ!
:set encoding=utf-8
:set fileencodings=ucs-bom,iso-2022-jp-3,iso-2022-jp,eucjp-ms,euc-jisx0213,euc-jp,sjis,cp932,utf-8
あとは常にステータスラインを表示するようして文字コードを確認できるようにしています。
:set laststatus=2
:set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
改行コードは fileformat で変更します。
  • :set fileformat=unix (LF)
  • :set fileformat=dos (CRLF)
  • :set fileformat=mac (CR)

emacs

バッファの文字コードを変更するには「C-x RETURN f」で文字コード指定のプロンプトを開いて変更したい文字コードに次のような値を指定します。
  • utf-8
  • euc-jp
  • shift_jis
  • iso-2022-jp
また、この文字コード指定の時にあわせて改行コードも指定できます。
  • -unix (LF)
  • -dos (CRLF)
  • -mac (CR)
文字コードが utf-8 で改行コードを CRLF で保存したい場合は「C-x RETURN f utf-8-dos」という感じです。

vimについては文字コードを変更する方法、というよりは文字化けせずに開くための設定ですね。いままでvimで開くと文字化けしたファイルを苦し紛れにemacsで編集してきたことがありますが、これで化けずにvimだけでも頑張れそうです。

また、Mac OSX にスイッチしてからは emacs(Carbon Emacs)をメインエディタとして使っていこうと息巻いていましたが、単なるメモ帳とファイルビュアー程度の使い方しかしていませんでした。様々な文字コードのファイルを自由に扱えるようになれば、私のemacs利用シーンもOSX上に限らずにもっと広がりそうです。

2008/11/03

Switch to Late2008

アルミ削りだしの新 MacBook Pro の質感に惚れ、一週間迷ったあげくに Apple Store でポチってしまいました。

MacBook Pro(Late2008)のキーボード(US)

実は昨年から MacBook Pro を使い始めていたので、switch といっても Windows PC からではなく Mid2007 から Late2008 へという意味だったりします。

10/21に以下の構成でポチって、ちょうど一週間後の10/28に手元に届きました。
  • 2.8GHz Intel Core 2 Duo
  • 4GB 1066MHz DDR3 SDRAM - 2x2GB
  • 320GBシリアルATAドライブ@ 7200 rpm
  • バックライトキーボード (US)
  • AppleCare Protection Plan for MacBook Pro(別便)
OSX での初めての移行でしたが、初回起動時に表示されるウィザードに従って移行アシスタントを使うことにより、とても簡単にできました。ネットワーク経由で4時間ほどかかりましたが、ホームディレクトリはもちろん、ソースからコンパイルした /usr/local 以下にあるものも移行されていたのは驚きました。私の環境では ATOK2008 と2GB超の VMware Fusion の一部のイメージファイルが移行できなかったので、それぞれインストールし直し、手動でコピーしました。

中身は問題なく移行できたので使用感はそれほど変わりないですが、やはりこの外観の美しさと、マルチタッチトラックパッドでのスワイプ動作がステキです。Mighty Mouse を使うことなくほとんどの操作が手軽にできます。ですが日常的に使う Firefox がまだスワイプ動作を正式にサポートしないので、MultiClunch をいれて便利に使っています。(http://www.moongift.jp/2008/03/multiclutch/)

Leopard で正式に BootCamp がサポートされ、VMware Fusionなどの仮想化ソフトウェアでも問題なく Windows が動作することが分かってきましたので安心して Mac に乗り換えました。一年ほど Mac を使ってみましたが、結局 Windows は自宅で仕事関係の Excel ファイルを編集するときくらいしか使いませんでした。(Excel:mac 2008 はあるのですが、マクロのサポートと WebDAV 対応がイマイチなので使っていません)

次に Windows PC を買うときは、SSD 搭載機の価格がこなれてきた頃のネットブック程度かなと思います。

そういえば、本体のサイズは変わっていないのにずいぶんと外箱がコンパクトになっていたのにも驚きました。
MacBook Pro(Mid2007)と(Late2008)の外箱比較

2008/09/23

screenで40より大きな番号を設定する方法

GNU Screen の初期設定では作成できるウィンドウの上限は40ですが、これだと不都合が生じるときがあります。ここではそれ以上の数を設定する方法をまとめます。

複数のサーバに対して設定ファイルを編集するウィンドウ、コマンドを実行するウィンドウ、ログをtailするウィンドウ、などとしているとあっという間にウィンドウの数が二桁になります。

ウィンドウ番号が一桁のものは「C-a ウィンドウ番号」と簡単にアクセスできますので、私はそれらを頻繁に利用するウィンドウ用として空けておきたいので、10番以降を用途別、たとえばWebサーバは10番台、DBサーバは20番台等と決めて作業していますが、デフォルトではウィンドウは40までしか作成できず、私の今の用途ではちょっと足りません。

調べてみると、これは .screenrcで変更できるものではなく、コンパイル時に指定するようです。

わざわざバイナリが用意されている screenをそのためだけにコンパイルするのも気が引けますが、ちょうど開発版では縦分割やレイアウトなど正式リリースが待たれる機能が実装されていますので、それらを試用すべく開発版をコンパイルして使っています。
% cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/screen co screen
% cd screen/src
% export CFLAGS='-DMAXWIN=100'
% ./configure --prefix=/usr/local --enable-colors256
% make
% make install
100個のウィンドウを作成したことはないですが、これでウィンドウ番号を99まで設定でき、「~の作業は21番のウィンドウ」「50番台はログをtailしているウィンドウ」「あまり使わないのは90番台」などとウィンドウ番号によるカテゴライズに幅がもてるようになりました。(私はdefzombieでログアウトしたウィンドを閉じない設定にしてるのでウィンドウ番号は固定のほうが都合がよい)

設定する方法と言っておいて実はコンパイルオプションでしたというのはズルい気がしますが、一応変更できたことをメモします。

なお、一桁番号のウィンドウへの切り替えはデフォルトで「C-a 0」~「C-a 9」と定義されていますが、二桁以上の番号に対しても同じ手順で切り替えできるよう、「C-a ' ウィンドウ番号」(select)もよく使います。

2008/03/26

人生通帳を使ってみたが

わずかばかりな金利差を求めてソニー銀行を使っていますが、本日、新・お金管理ツールとして「人生通帳」なるサービスが提供されたようなので使ってみました。

新・お金管理ツール「人生通帳」提供開始のお知らせ
ソニーバンク口座に加え、他の金融機関、航空会社、携帯電話会社、ポイントサービス会社などの情報を一括管理。

アグリゲータサービスキター!!!という感じで使い倒そうと思っていたのですが、サイトログイン後に人生通帳を開くとなんか画面が変です...

2008/02/11

スクロールバッファの空白ではない始めの行に移動する方法

screenで大きめのスクロールバッファを確保したときに、有効な先頭行に移動する方法のヒントを見つけたのでメモしておく。

screen-usersに件の投稿があったのでそれをヒントにした。
How to go to the beginning of the scrollback buffer
ここでは自己レスとして次の様な解があがっていた。
bindkey -m b stuff "g/e^["
  • bindkeyでコピーモードに「b」と言うキーを
  • 先頭行に移動して(g)
  • 「e」で始まる行を検索(/g^[)
なるほど、「g」で1行目に移動して、出現頻度の高い文字「e」で検索すれば最初の有効な先頭行になるだろうと言うことですか。

コピーモードの検索において正規表現が使えれば楽なんでしょうけど、こういう方法があるんですね。それ以前にstuffなるコマンドを初めて知りました。結構manは読んだつもりだったのですが...

自分の環境では「e」で検索してもあまり意図したところに飛んでくれないので次の様にしてみた。
bindkey -m -t ;b stuff "g/:^M^F^B"
  • b」だとコマンドモード中に入力している「b」に反応してしまうので「;b」に変更
  • 改行は「^[」ではなく「^M」に変更
  • 検索文字は「e」ではなく「:」に変更
  • ヒットした行を画面最上部に持ってきたいので「^F」「^B」でページ移動
検索文字を「:」にした理由は、普段「verbose on」で使っているため、新規ウィンドウ「C-a c」の先頭は次の様になるからです。
:screen (zsh): /usr/bin/zsh
yoshikaw@hoge[4] ~%
スクロールバッファが全て満たされているときにこのコマンドを実行すると意図しない行に移動してしまいますが、それはそれでまた「g」すればいいだけなので我慢します。

2009/08/29 追記
screenrc中にコントロールキャラクタを入れるとコピペ時に面倒なので8進数で表記する。
bindkey -m ;b eval 'stuff g/:\015\006\002'
  • 入力中のタイムアウトは気にしないので「-t」は削除

2010/11/27 追記
screen-usersに目から鱗な回答がありました。コレを覚えておけば、ここまで書いてきた無駄なbindせずにすみますね。
Re: Question Regarding Navigating the Buffer
Enter scrollback mode then hit "g w"

2008/02/10

.screenrcを晒してみる

仕事がら複数のサーバで作業することが多いので2年ほど前からGNU Screenを使い始めましたが、非常に危険です、コレ。もうこれがないと生きてゆけなくなりました。せっかくなのでネット上での先駆者の設定を拝借したりしてコツコツとカスタマイズしてきた内容を晒してみます。

2008/01/03

VMware Server@Windows 2000が自動起動しない場合の対策

会社の Windows 2000 Server(SP4) で動かしている VMware Server(1.0.4)がOS起動時に実行されていないことに気づいた。調べてみるとサービスの起動順序に問題があるみたいなので対応した内容を記しておく。

起動しないときのサービス状態を確認すると、VMware Authorization Serviceと言う物が止まっていた。こいつを手動で開始すると、VMware Serverも使える様になる。なんでかな~、とおもってググってみるとやはり解決法が。

VMware Server が 2回目以降使えない
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMAuthdService]
"DependOnService"=hex(7):76,00,6d,00,78,00,38,00,36,00,00,00,77,00,6d,00,69,00,\
00,00,00,00

で直ったようです。元々「vmx86」だったところを「vmx86 wmi」に変更した形です。
こちらのレジストリ設定を参考にさせていただいたところ、問題は解決しました。
"DependOnService"というエントリ名からしてWMI が事前に動いている必要があったんでしょうね。