Vimにおける Esc と Ctrl-cの違い。
はじめに
一般的なキーボードでは押しにくい位置にあるEscキーの代わりとして用いられているCtrl+c。Wikipediaにも
他のモード中に ESC か Ctrl-[ 、Ctrl-c を押すことでこのモードに移行できる。
http://ja.wikipedia.org/wiki/Vim#.E3.83.8E.E3.83.BC.E3.83.9E.E3.83.AB.E3.83.A2.E3.83.BC.E3.83.89
としか書かれていない。(お前が編集しろと言うのはおいといて)
しかしEscとCtrl+cは挙動が違うので、代わりに使うのはやめましょう(言い過ぎ)という話。
ノーマルモードへの移行時の前置数値の扱い
インサートモード時にEscまたはCtrl+cを押すとノーマルモードへ移行するが、明確な挙動の違いがある。- 5 i - Esc
- 5 i - Ctrl+c
この2つを試すと挙動の違いが確認できる。
前者(Esc)は5個の[ - ]が入力されるが、後者は1個の[ - ]しか入力されない。
これは、Escではノーマルモードに復帰し(コマンド入力が完了し)、数字の回数繰り返されたのに対し、Ctrl+cではインサートモードを失敗(強制終了)し、ノーマルモードに移行したと認識されたため、数字がキャンセルされ働かなかったためである。(多分ね)
まとめ
とはいっても、ほとんどの場合Ctrl+cは期待通りの挙動をしてくれるはず。現時点でCtrl+cに慣れている人はあまり気にしないのが賢明かもしれない。・・・ちなみに私はCtrl+[派
こちらはEscと全く同じ挙動をする
カレントディレクトリの全ZIPファイルを展開 / 全ディレクトリをzip圧縮
超やっつけ。
1. カレントディレクトリの全ZIPファイルを展開
find . -maxdepth 1 -mindepth 1 -type f -name "*.zip" -exec unzip {} -d {}.files \;
find . -maxdepth 1 -mindepth 1 -type d -exec zip -r {}.zip {} \;
追記
ちなみに、findにはexecオプションを複数指定可能で、左から順番に処理されるらしい。
たとえば、1でついでにzipファイルの削除を行いたい場合は
find . -maxdepth 1 -mindepth 1 -type f -name "*.zip" -exec unzip {} -d {}.files \; -exec rm {} \;
とすればいい。
また、-execオプションの代わりに-okオプションを指定すると、実行前に確認が行われる。
先ほどのスクリプトで削除の確認を行いたい場合は、
find . -maxdepth 1 -mindepth 1 -type f -name "*.zip" -exec unzip {} -d {}.files \; -ok rm {} \;
となる。速度を気にするならxargs使うべきだが。
追記2
[*.zip]の他に[*.ZIP]や[*.Zip]等も含ませたいときは -iname が使える。これは大文字小文字を区別しない事をのぞいて -name と同じ挙動をするオプションである。
もっと複雑なファイル名の指定をしたい場合は -regex や -iregex 等が良いだろう。詳しいfindのオプションはmanやココなどを参照。
玄箱Pro + Debian lenny + 2TB HDD 起動まで
現状
現在は、640GBのHDDにDebian etchが入っている。2TBのHDDを新調したのでコレにlennyを入れることに。
容量が2TBなのが悪夢の始まりだった・・・。
エラーまで
参考にしたのは、このページ。HDD容量が2TB未満の場合はそのままでインストールできる。
ただし、このページは現在フラッシュからブート出来ているという前提で書いてあるので、etchが入っている環境ではフラッシュブートに戻さなくてはならない。
方法は簡単で、このページにある。
このページでは、シリアルコンソールを使って行っている。
シリアルコンソールが無くても可能かもしれないが調べていない。
フラッシュブート時は(変更していなければ)
user | root |
pass | kuroadmin |
でログインできる。
先ほどのページの手順ほぼそのままでOKだが、
時刻同期だけはそのままでは出来なかった。記事には、rdateを使うように書いてあるが、なぜかエラーで調整できなかったので、手動で同期。
date "120128452010" #date "MMDDhhmmYYYY" hwclock -w
多少ずれてるくらいは問題ない(はず)。
。。。
さて、上記サイトに従って2TBのHDDにlennyをインストールした。
普通ならそのままブートできて終わりのはずだ。(実際試しに160GBのHDDに入れてみたら正常に起動した)
・・・が、起動しない。
シリアルで見てみると[Bad MagicNumber]とか出てくる。
どうやらHDDを正常に認識できていないようだ。
ここからが長かった。
いろいろ試したが、最終的に全部無駄だったと分かったので割愛。結論だけ。
エラーの原因
現在、HDDのフォーマット方法には、「MBR(従来方式)」と「GPT(最近出てきた)」の2種類がある。玄箱proのlennyはHDDをGPTでフォーマットする。
一方、玄箱proは基本的にGPTに対応しているので問題なく読み込める。
が、HDDが2TB以上の場合は何故か正常に処理できないようだ。
コレが全ての原因。
解決まで
GPT->MBR変換
GPTが読めないならMBRに変更すればいいじゃない!ということでGPTをMBRに変更することに。
方法はいくつかあり、データをそのまま残して行う方法もあるようなので使うことにする。
無料ならコレとか有料でいいならコレとかがある。
他にもググればいくつか出てくる。残念ながらLinuxで動きそうなのはなかったが。
方法はソフトによって違うので割愛。
パーティションテーブルの順序の入れ替え
さて、MBRになったし、これで起動するはず!と重い、玄箱Proにセットし起動。ブートした!→Kernel Panic・・・orz
というわけで、前進はしたがカーネルパニックで起動せず。
メッセージを見ると、/dev/sda1 (/boot) が /dev/sda2を起動しようとしてKernelPanicが起こってるようだ。
インストール時に
/dev/sda1 230M ext2 /boot /dev/sda2 6.5G ext3 / /dev/sda3 384M tmpfs tmp /dev/sda4 1.8T ext3 /home
と指定したので、何が悪いのか分からなかったが、dfしてみると、
/dev/sda1 230M ext2 /boot /dev/sda2 1.8T ext3 /home /dev/sda3 384M tmpfs tmp /dev/sda4 6.5G ext3 /
となっていた。
/home(にマウントされるはずの領域)からブートしようとしてカーネルパニックが起こっていたようだ。
おそらく、MBRに変換したときにずれたのだろうと思い、変更することに。
これを修正するには、fdiskコマンドを使えばいい。(参考)
fdisk /dev/sda (略) Command (m for help): x #特殊機能モードへ。 Expert command (m for help): f #領域の順序を適正化する Expert command (m for help): w #適用して終了
これで、dfしてみると、正しい順番に直っていた。
起動!
再び、玄箱Proに接続し起動。ブートした!→initキタ!→ログインキタ!!!
というわけで、長かった(丸2日)戦いも終わり。
現在はサーバの設定と格闘中。
おわり。
android に bash を入れる
参考サイト
http://lbdaberi.blogspot.com/2009/01/androidbash.html
http://d.hatena.ne.jp/shinichiro_h/20081226
ホストOSはUbuntu 9.04(ja)
デフォルトのシェルが使い辛いのでbashを入れることに。
手順は以下
1. クロスコンパイラをDL
ここからクロスコンパイラをダウンロード
>Target OS : GNU/Linux
>Download : IA32 GNU/Linux Installer
ファイル名は[arm-2009q1-203-arm-none-linux-gnueabi.bin]
今回はホームディレクトリにダウンロード
2. クロスコンパイラ導入
$ cd ~ $ ./arm-2009q1-203-arm-none-linux-gnueabi.bin
注)ここで失敗する場合はここを参考に /bin/sh を dash から bashに変更する。(shebang変更はうまくいかなかった)
インストーラが起動するのでインストール(デフォルトの設定で良い)
今回は[~/CodeSourcery] 以下にインストール
$ wget http://www.busybox.net/downloads/busybox-1.13.2.tar.bz2 $ CC=~/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc CFLAGS=-static LDFLAGS=-static ./configure --prefix=/media/disk/system --host=arm-none-linux-gnueabi 注) CCはクロスコンパイラの実行ファイル, prefixはインストール先 $ make 注) 足りないパッケージは適宜入れる。自分の環境では[yacc]が入っていなかった。 $ make install
あとは
adb shell
で入って実行すれば良い
ドライブ数について
すごくどうでもいい話。
http://itpro.nikkeibp.co.jp/article/COLUMN/20090214/324765/?ST=lin-os&P=1
Linuxでは
sda, sdb・・・sdz
まで使いきった後は、
sdaa, sdab・・・
となる。
kernel2.6.27までは sdzzz までの 1万8278台(26+26^2+26^3) まで
kernel2.6.28以降は 100万台まで使用できる(ただし標準では1万8278台に制限されてる)
//どうでもいいけどもう少し読みやすいソースコードにできないものか・・・
おまけ
http://d.hatena.ne.jp/teamrar/20080621/p1
windowsではZドライブの次が無いらしい。
認識はされるけどドライブレターが割り振られないのかな?
まーそんなに使うやつはそうそういないだろう。たぶん。
//タグに初めてwindowsがついたよ!
Linux + Vimperator2.x で hint時にIMをオフにする
Vimperator 2.x 系では hints 時に前回のIMを起動させる
IMがオンのときはタイプしても飛んでくれない・・・
というわけで、IM をオフにする方法
環境 | |
---|---|
OS | Ubuntu9.04 日本語版 |
ブラウザ | Firefox 3.0.x |
Vimperator | Vimperator 2.1 |
IM | scim 1.4.6 |
1. IM側でオフにするショートカットを設定
上記環境の場合、
[SCIM入力メソッドの設定] -> [フロントエンド] -> [ホットキー] -> [終了]
で設定可能。
今回はControl + Shift + space を設定
直には触らないだろうから適当に。。。
2. xvkbd を入れる
# apt-get install xvkbd
今回は Ver3.0 が入った。
3. Vimperatorの設定
noremap <silent> f :!xvkbd -text "\\[Control]\\[Shift]\\[space]"<cr>f
以上でfを押したときにIMがオフになるはず。
ダブルコーテーションの中身は適当に読み替えて。
- -
io.system(':!xvkbd -text "\\[Control]\\[Shift]\\[space]"')
を送っても同じなんだけどjavascriptの知識は皆無なんで・・・
誰かお願い。。。