技術

2012年11月24日

   いいエディタとは、

     手に馴染み、書きごこちの好い

       万年筆のようである。

パソコンは筆記用具として、テキスト情報に限って秀逸である。
テキストを扱うソフトウェアであるエディタが秀逸であれば、である。
最近vimを使っていてとても気持ちいいので、使ってきたエディタを振り返りつつ、エディタの今後を考えてみる。

1.はじめにMIFESあり

MS-DOS ver.2や3の時代は、あまり選択肢もなかったが、フルスクリーンエディタとしてはMIFESがスタンダードであった。
OSについてくるエディタはEDLINといって、何行目かを指定しその一行を編集できるワンラインエディタというしろもの。これではconfig.sysを一つ編集するのも大変な苦労だった。
一方、一太郎などのワープロソフトは今と変わらず、機能豊富でありながら、重量級アプリであり動作が重く使いにくかった。
しかしながら、日本語入力をFEP(Front End Processor)として分離する技術はこの頃に確立され、日本語のテキスト環境は整いつつあった時代。論文や小説、プログラム、パソコン通信への投稿記事など、ある程度まとまった量のテキストを作成、編集するのにエディタは最適だった。
ぼくも多分にもれず、MIFESによりテキストの扱いを体が覚えていった。

2.すばらしきVZ Editor

その後、ビレッジセンターからVZ Editorというツールが発売される。
さくさくした動作と、あらゆる機能のカスタマイズが可能で、かつVZマクロという独自の言語体系を装備していた。
また、常駐モードにより、MS-DOSのバックログが取れたり、瞬間的な起動ができることも重宝した。(当時のソフト起動はフローッピーディスクのLoadingでかなりの時間がかかった)
キーバインドはMIFES用のマクロがはじめから用意されており、ぼくもそれを利用していた。
しかし、徐々に自分の利用スタイルができてくると、できあいのマクロを改造し始めるようになる。
使い始めて、一年ほどでほぼ自分カスタマイズのマクロは完成の域に達して、ぼくのエディタの原風景=スタンダードは、この状態に確立された。
PCを使う作業の大部分を占めることになる、テキストの読み書きという操作環境ができてしまうと、その環境をどこでも使いたいと思うようになり、自分環境を1フロッピーに入れて持ち歩くようになった。
しかしながら数年後、MS-DOSは、GUIそしてマルチタスクという流れに飲み込まれ、消えていく。
windows3.1では、できることがMS-DOSとほぼ変わらないのでスルーしたが、windows95はそうもいかなかった。TCP/IPの搭載と、インターネットの普及のためである。
そして、自分としては完璧と信じるエディタ環境であるVZ Editorと泣く泣くお別れしなければならなくなった。

3.vi事始め

UNIXとの出会いは、すなわち、viとの出会いでもある。
PC環境はVZ一本で暮らせてきたが、UNIX環境にVZはなかった。当然である。
はじめはviのモードやコマンドのわかりにくさに、ストレスフルな操作感であったものの、Cが理解できるようになるよりも早く、viの操作に慣れていった。
まだインターネットがTCP/IPの巨大な実験場であり、webが発明されていなかった時代。viに関する情報は非常に少なかった。
しかし、運が良いことに、よい先輩に恵まれ、UNIXが職人文化といわれる由縁である口伝継承により、viの便利な機能を徐々に教わり、VZの時とはまた違うエクスペリエンスを得ることができた。
そのためか、viをカスタマイズすることはほとんどなく、標準キーバインドのまま10年近くも使い続けていくことになる。
viの偉大なことは、その歴史的経緯により、特殊キーを必要とせず、CTRLキーやESCを使うくらいで、あとは一般キーのみで操作が完結していることである。
そのため、SunOSのSunView、OpenWindows、X-windowsのMotiff、KDEといったウィンドウシステムとキーの競合もおきず、日本語入力のwnnやcannaとも相性がよかった。

4.windowsは秀丸に決まり

viはviとして必要十分であったが、windows95以降のPC用エディタは少々困った。VZ Editorの後継として発売されたWZ Editorは、いまいちいまにのできであったし、OS標準のnotepadはEDLINと同様問題外だった。
DOS窓でVZを使ってみても、あまり便利ではない。
なぜならマウスやウィンドウシステムといったGUI環境と、MS-DOS上で設計された操作感が合わないためだ。シングルタスクOSであったMS-DOSでは画面も占有するし、他のアプリケーションとのクリップボード経由の情報交換も必要ない。
そんななか秀丸をみつけ、ふたたびVZ Editorをいじくったように、秀丸マクロをいじくりはじめた。
そうして、体にしみ込んでいたMIFES+VZ Editor的な独自キーバインドやメニュー構成を、windows用にさらにアレンジし、ガラパゴス化していくことになる。

5.HappyHacking Keyboardの参入

ほぼ安定化したかに見えた秀丸カスタマイズであるが、キーボードを変えたことで、その安定が崩れていく。
そう、有名なHappy Hacking Keyboardを買ったのである。無駄なキーがなく、コンパクトで、そして打ち心地がいいキーボード。
なんとファンクションキーがないのである。いや、ないのがカッコイイのであるが、困ることもある。
メニューを出すのに、MIFESの時代から、ファンクションキーを多用していた。しかし、HHKではFnキーを押しながら数字を押すことでファンクションキーとして機能する。
これはかなり面倒くさい。
ファンクションキーには、選択開始や新規ファイルのオープンといったよく使う機能が割り当ててある。
それらをコントロールキーの組み合わせに変えていかなければならないのだが、キーバインドを追加しだすと、玉突きというか、ところてん式に次々と変更せざるえなくなる。
正直困まりはてた。
数日間悩んだあげく、助けを求めたのはEmacsのキーバインドだった。

6.Emacsっていいかも

Emacsもviと同じく、一般キーを中心にキーバインドが設計されている。モードがないため、編集機能などは基本的にCtrlキーとの組み合わせが原則となるが、長い歴史の中でそれなりに洗練されているだろうと期待した。
調べ始めると、予想以上に簡単に機能拡張ができる
anything.elのできのようさに感激し、これはいけると思い、google calenderとの連携にわくわくし、org-modeには惚れ込んだ。表の作成、文章構造の入れ替えなど、ビジュアル的に効率的に行える。
気を良くして、秀丸もEmacsバインドにし、ubuntuにもEmacsの最新版を入れた。
そうして、Emacsのカスタマイズを楽しみながら、2,3週間使い続けてみたところ・・・。
・・・慣れない。
いつまでもキーバインドのメモをみないと、やりたいことができない。
何事も、最初の習得コストはかかるものであるが、それにしても覚えられない。
数が多すぎる。Emacsを使う頻度が徐々に減っていき、なおさら記憶と指にキーバインドが定着せず、結局、Emacsをあきらめることになった。
しかし、得られたものもある。
カーソルキーをつかわず、カーソルを動かすEmacs風のキーバインドは身に付いた。bashと共通なことが定着した大きな理由だろう。
そしてこれが、後ほど役に立つことになる。

7.ubuntuはgeditに決まり

ubuntuには、OSの設定でEmacs風キーバインドを有効にする、という項目がある。
これをいれておくと、アプリケーションのテキスト入力時に、Ctrl+aやCtrl+eといったカーソル移動が可能となる。
これはこれで便利であり、さらに標準のgeditもカスタマイズができるけっこう高機能なエディタであり、実用的である。

8.OS Xってどうなの

エディタが固定化しないまま、ふらふらしているうちに、Macbook Airを使うことができるようになった。
会社で買ったものだが、漠然とぼくが占有することがなんとなく許されている。
ということで、OSのセットアップもそこそこに、OSX用のエディタ探しである。
しかし結局、満足できるエディタアプリを見つけることができなかった。
かなりいい線にいったのが、みみかきエディタmiであるが、いま一歩、ぼく望むキーバインドにはならない。

9.たどり着いたところはvi

Emacsにトライして得られたことは、UNIX系エディタのカスタマイズ性の広さである。
viは基本的に標準のまま使ってきたわけだが、OSXやubuntuがメインマシンになってきている今、viいやvimを本格的にカスタマイズしてみるのがいいのではないかと考えた。
google先生の助けを借りて、手探りをしながらvimの航海に船出した。
vimをメインディタにするこを決心できたのは、皮肉にもEmacsのおかげである。
vimでインサートモードのときに、ちょっとだけカーソルを動かしたいが、そのためだけにノーマルモードに戻るのは面倒だ。そんなときは、Emacsのキーバインドでカーソルを動かす。これが、非常に気持ちいい。楽ちんである。
わずかであるけどもEmacsを経験したことで、vimの最大の特徴であり欠点でもあるモードの切替の手間が画期的に減らせることができた。これが、vimを主エディタに決心したブレークポイントとなった。
そして、unite,vimfilerといったpluginと出会い、.vimrcの深みにずぶずぶとはまっていくことになる。
憧れのorg-modeも、自分が気に入ったところは、vimでも実現できた

10.マルチプラットフォーム

ubuntu,MacOS,windowsをせわしなく行き交う生活をしていると、ショートカットキーの使い分けが混乱する。
ウィンドウ操作のキーバインドは、OSに深く依存しているので、実質統一するのは難しい。
しかし、エディタはvimで統一することで、ほぼ完全に一致できる。
日本語入力もgoogle IME(Mozc)を入れて、キーバインドファイルのエクスポート/インポートで、これまた統一できる。
ウィンドウマネージャ、エディタ、IMEで競合が起きないように、注意して一度設計してしまえば、それぞれの設定を共有することで、かなり統一的な操作環境を構築することができた。
IME(Mozc)はMacの「ことえり」をベースとし、それをカスタマイズする。
なぜなら、Macのことえりは、ほぼ一般キーを中心に作られていることに気づいたからだ。ATOK等ではF6やF7で文字種変換をするので、そこから変えていくのが面倒だからだ。

11.そしてevernoteへ

こうしてできあがったエディタ環境であるが、それぞれのマシンで作ったテキストはファイル単位で散乱する。
極力Dropboxで集約していくものの、一時的にデスクトップやローカルハードディスクに置くこともある。
それが、違うOSを使っている時に参照したくなるなど、分散してしまう不便さが残る。
そこで、テキストデータの終着点を決めておく必要がある。
いままでの経験から、やはりEvernoteが終着点に相応しいことがわかってきた。
一番の理由は全文検索ができること。またEvernoteでは、iPhoneなどのスマフォに同期することだ。もちろん、Dropboxでも参照はできるが、オンラインであることが前提になる。Dropboxで一度参照したファイルは、キャッシュされるので、オフラインでも参照可能であるが、どのファイルをキャッシュしておくかを決めるのは結局手作業だ。
その点、Evernoteでは、オンライン時に同期しておけば、その後はオフラインでもみれる。(ただし、プレミアム会員に限る)
vimでもEverVimを使ってEvernoteに直接書き込むこができるので、アップ自体もさほど面倒ではない。
Evervimの使い方は、こちら(ubuntu)こちら(OSX)に書いた。
Evernoteをストレージとし、vimをフロントエンドとした、マルチマシン、マルチプラットフォームでのテキスト管理システムの完成である。

sublime text 2というテキストエディタが最近評判がいい。
いままでテキストエディタはローカルのなかでいろいろなソフトウェアと連携してきた。IDEやメールソフト、コンパイラやインタープリタだ。
これからはEvernoteやDropbox、ブログシステムなど、ネットワークを介した連携も求められる。 vimが内部でpythonを呼んでネットワークを扱うように、エディタ自身の拡張言語がRESTなどのネットワーク機能を持つようになるだろう。
実際、iPhoneのエディタはそうなっている。
これからのエディタの進化が楽しみだ。

12.おまけ

VZ Editor時代、FEPはATOKが圧倒的なシェアを持っていたが、WXというフリーウェアのFEPが一世を風靡した。ATOKに比べて小さな目な辞書であるにもかかわらず、精度の高い変換を行うことができた。また、キーバインドも自由自在にカスタマイズできた。
パブリックドメインソフトウェアであったため、パソコン通信でダウンロードするのが一般的な入手方法であったが、当時の通信環境は2400bps+NMP5による圧縮といった時代である。辞書ファイルが1MBを超えていたので、そのダウンロードだけでも数時間かかるほど。雑誌についてくるのはCD-ROMではなく、3.5インチFDDだった。WXが付いたムック本にはFDDが4枚も付いていた気がする。
電話代を使い気長にダウンロードしすぐに使うか、翌月の雑誌のFDDを待つか、といった選択を迫られたものである。



sylphide_ffr31mr at 22:22コメント(0)トラックバック(0) 

2012年11月14日

iPhone3Gを日本上陸日に入手して以来、今までAndroid端末には、まったく興味を持っていなかったのだが、訳あって、Docomoのスマホを買うことになった。
そこで調べ始めてみると、Galaxy Noteのコンセプトが素敵すぎて惚れてしまった。 「書く」ということにこだわったスマートフォン。

2012年冬モデルで出るGalaxy Note IIは、11/16の明後日、発売だ。
残念ながら、発売日当日ゲットはかなわないが、近いうちに届くだろう。
まだ触ったことがないので、実際の使用感はわからないが、世のレビューを見ると、とても期待できそうだ。

iPhoneにはじまるタッチスクリーンタイプのデバイスは、3Gネットワークやwifi、LTEを使っていつでもインターネットへアクセスし、情報を閲覧利用することができる。
最近のiPad mini、Nexus 7などの7インチ前後のディスプレイデバイスは、携帯性と閲覧性のバランスがとれていい感じだ。これがあればPCもいらない、と思わせるほどに。
この情報化社会(過多な)において、情報を消費する行動については、現在のところ最適なデバイスだ。

しかし、書く、という操作をしようとすると、話は別である。
まずテキストを書くことを考えよう。
入力デバイスは、いくつかある。

  • ソフトウェアキーボード
  • 外部キーボード
  • 静電誘導ペン

ディスプレイ内のソフトキーボードでは、素早く長く書き続けるのは無理。フリック入力でも、あまり変わらない。
キーボードを外付けすると、タッチスクリーンとの相性が悪い。
静電誘導ペンを使った手書き入力では、精密な位置決めが困難で、その結果文字の形が崩れまくる。クレヨンで書いているような大雑把さしかできない。
仕組み的に、静電誘導ペンはある程度太さが必要なためだ。たとえば4本の線で長方形を描こうとしても 角をぴっちり合わせた四角を描くのは至難の業。
熟練して読める程度の字がかけたとしても、それは図形データになってしまうから再利用が難しい。
それに手書き文字認識は、まだ実用レベルかどうかあやしいところ。

結局ベストなテキスト書きデバイスは、ノートPCにテキストエディタである。
で、MacBookAirを持ち歩くことになる。

図を描くのも同様。
ペンを使っても、上記のクレヨン感覚のため、図の精度は低い。
時間をかけてイラストを描いていくような場合には、まだ使えると思うが、会議のメモに図を描いていくには、やはり紙のノートだ。

こうした「書く」、「描く」ことに挑戦したのが、Galaxy Noteである。
スタイラスペンを標準装備し、そのペンにボタンを付ける。また、筆圧センサーもつける。
その機能をアクションとして書く、という動作に紐付けたため、柔軟な制御が可能になる。スマホの指の代わりに静電誘導ペンを使うのとはわけがちがう。
ペンを使うことを前提のタッチスクリーンなので、ペンを細くすることもできる。
このペン用にドライバもアプリを新たに開発しているし、ペンの抜き差しすらセンサーつけている。
こうした独自の拡張がただのAndroid端末にはない差別化を生む。
Android OSをベースにしていても、それに付け加えたアイディアがテンコモリなのである。

Linux OSが汎用ハードウェア+kernelの共通部分を使いつつ、各ディストリビュータは独自の思想と利用シーンを想定したOSとして仕上げていく時代に入ってもう10年。
Androidもそうした提供思想を必要とするステージにきているのだと思う。

iPhoneが公開される前、携帯機はどのメーカも横並びだった。
Androidが普及した現在、やはり横並びの、特徴のないスマホが出揃ってしまった。
そんな中、あえて独自カスタマイズしたデバイスを出せるメーカーがInnovaterであると思う。



sylphide_ffr31mr at 22:39コメント(0)トラックバック(0) 

2012年11月09日


iPadが発売されるときにぼくが妄想していた、スマホと合体するタブレットが、ASUSから実現した。

PadFone2
http://www.asus.com/Mobile/PadFone/

sylphide_ffr31mr at 10:41コメント(0)トラックバック(0) 

2012年11月06日

Amazon Kindle Storeが日本で開始したこともあり、 Phoneで本を読む機会も増えてきた。 長時間iPhoneを持っていると、手が疲れてくる。 また無駄に手に力が入るので、手のひらの角があたる 部分が痛くなってくる。 紙の本ではなかった不便さだ。

そこで、スマートフォンをより少ない力でホールドする方法を 考えている。

最も簡単な方法は、スマートホンの背面にゴムバンドをつけて、そこに指を通す方法。 輪にしたゴムバンドを対角線に角にひっかけてやるり、そこに指を通すと 十分に固定化される。 これをVer.1として数日試したが、iPhoneの角が丸いため、よく外れる。 Galaxy Note 2になると、より角のRが大きいので、外れやすいと思われる。

そこで、ver.2を作った。

100円均一で買ったゴムバンド。

01-1

手芸屋さんで買った、ゴムバンドを輪にするクリップ。

02-1

そして、机の角に子供が頭をぶつけても痛くなくするコーナークッション。

03-1

2つのコーナークッションの真ん中にカッターで切れ目を入れ、そこにゴムバンドを通す。 それぞれの上に、一つずつボンドで重ね合わせるとできあがり。

04-1

コーナークッションを2つ重ねると、ちょうどiPhoneの厚さになる。

05-1

iPhoneの対角線にコーナクッションを押し込むと、このように背面にゴムバンドが付く。

06-1

ここに指を2、3本通すと、こう。

07-1

手を振っても落ちない。

対角線に設置せず、左側面に設置することでもいい。 そうして、こんなふうに持つこともできる。

08-1

実はこれ、まだ試作機である。 今月16日に発売される、Docomoのスマートホン冬モデルのGalaxy Note 2を狙っている。 5.5インチの大型スマートホン。ほとんどミニタブレットである。 これを、電車の中等で片手操作をするのは至難の業。四本の指で 本体をホールドして、親指が届く範囲は、全体の3/4程度である。 そのため、しっかり固定化する方法を模索している中での試作である。



sylphide_ffr31mr at 21:44コメント(0)トラックバック(0) 

2012年10月27日

今まで、Android端末にはまったく注意を払ってこなかったのだが、Galaxy Noteをみつけ、書くことに注力したそのコンセプトに惚れた。
Galaxy Noteは、2012年4月に発売され、2012年11月にGalaxy Note2が発売される。 いま、ぼくはそれを狙っている。
メモリやCPUは1に比べて2はアップしているのだが、画面解像度だけは落ちている。 800x1280だったのが、720x1280になっているのだ。
画面のサイズそのものは5.3インチから5.5インチに大きくなっているのに、横が狭くなっている。結果的に画面は細長くなっているようだ。

アスペクト比が変わったスマホは他にもある。iPhone4からiPhone5への変化だ。
以下のようにまとめると、よくわかるが、HDフォーマットへの適用がその理由だろう。

機種 画面サイズ 画面解像度 アスペクト比 規格名 コメント
Galaxy Note 5.3インチ 800x1280 5:8 WXGA 液晶ディスプレイ普及期のころのアスペクト比
Galaxy Note II 5.5インチ 720x1280 9:16 HDハイビジョンのアスペクト比
iPhone4 3.5インチ 960×640 2:3 --- 写真のLサイズのアスペクト比
iPhone5 4インチ 1136x640 9:16 ---ハイビジョンのアスペクト比
------ 1920x1080 9:16 Full HDハイビジョンのアスペクト比

アスペクト比の問題だけなら1366 x 768など、長辺も伸ばし密度(PPI)を下げないでいてほしいと、はじめは思った。
で、PPI(Pixel Per Inch)を計算してみると、以下のようになる。
解像度(PPI)= SQRT{ (短辺ピクセル数)^2+(長辺ピクセル数)^2 }

機種 短辺ピクセル 長辺ピクセル 画面サイズ 解像度(PPI)
Galaxy Note 800 1280 5.3 284.8
Galaxy Note II 720 1280 5.5 267.0
iPhone4 640 960 3.5 329.7
iPhone5 640 1134 4 325.5

PPIは値が大きいほど高密度であり、なめらかに見える。
なので、Retinaディスプレイの宣伝で、PPIは大きいほどいい、と思われがちだ。ぼくもそう思っていた。
ところが、文字の大きさはptで指定されるため、PPIが大きいと文字は大きくなる。
なぜか。
文字の大きさの単位、1ptは1/72インチと定義される。
例えば、10ptの文字は、10/72インチの大きである。
これを仮に300PPIのディスプレイに表示すると、1インチに300ピクセルがつめこまれているから、10/72インチを表すには(300x10/72=43)ピクセル必要となる。
一方、100PPIでは、(100x10/72=14)ピクセルでよい。つまり、液晶で表示されるピクセル数がPPIが小さいほど少なくてすむ。そのぶん、曲線の滑らかさは失われるが、見た目としては小さな字になる。
このことから、テキスト主体の利用であれば、PPIはさほど必要ないのである。
Galaxy Noteが、ノートとして機能することに軸足を置いているので、実はPPIはさほど必要ない、という判断もあるのであろう。

さて、Note2の発売はいつだ!?



sylphide_ffr31mr at 00:45コメント(1)トラックバック(0) 

2012年10月22日

vimを本格的に使い始めたが、Emacsがうらやましいところがひとつある。org-modeがあることだ。
org-modeは、Emacsをアウトラインプロセッサとして使うための機能を付与する非常に強力なスクリプトである。 vimにもorg-modeプラグインが開発されているが導入が難しい。また、Emacsで使うからこそ強力で便利であるのであり、そのままの操作感をvimに持ち込んでも無理があるというもの。

そこで簡易なプラグインの導入で、アウトラインプロセッサとして実用になる手段を考えた。
え、ニーズ?   なにそれ、おいしいの?

1.求める機能

org-modeで特に便利だと思っている機能のうち、以下の2つについてvimに持ち込む。

(1)表作成機能

テキストで表を作るとき、スペースの数を合わせるのが最も時間がかかる。 表の内容だけをスペース区切りで羅列し、ワンタッチで表形式に整える機能。 整形ルールは、1つのスペースに区切った項を、|(縦棒)を補って表形式にする。

(2)視覚的な文書構造の入れ替え機能

大項目、中項目、小項目といった各文章単位を、インデントを使い記述していき、ブロック単位で前後関係を入れ替えたり、レベルを上げ下げする。その際、視覚的にスライドして移動する機能。

2.実装に必要なプラグイン

(1)表作成機能

表を簡易に作成する機能はvim標準では存在しないので、以下のプラグインを導入し、任意のセパレータ文字で表形式に整える機能を付与する。

(2)文書構造の編集ー領域の選択の拡張

文書の階層構造におけるレベルの移動は、インデントの量により決まる。vimでは、ビジュアルモードで選択した行を、"<"と">"でインデント量を増減させられる。そこで、ビジュアルモードでインデントを基準とした選択をできるようにする。そのために以下のプラグインを導入する。

(3)文章構造の編集ー上下移動

vimには、複数行をひと塊として扱い、1行に畳み込んでみせるfold機能がある。 畳み込みにはレベルがあり、第一レベルの畳み込みに、複数の第二レベルの畳み込みを組み入れられる。 その機能を使い、章や段落を1行に見せかけて編集することで、文書構造を行の移動として入れ替えられる。標準のままでは、畳み込んだときの表示がわかりにくいので、以下のプラグインを導入する。

3.表の作成機能の設定と操作方法

(1)Alignの設定

上記のAlign.vimをインストールしたら、以下の設定を入れる。 マルチバイトを使うので、3を設定しておく。

let g:Align_xstrlen = 3

(2)以下のキーマップを設定

どのキーに割り当てるかは任意。ここれは、,tに割り当てている。

vmap <silent> ,t :s!\ !\|!g<CR>gv:s!.*!\|&\|!g<CR>gv<Plug>AM_t\|

(3)操作方法

[基本]スペース区切りで書いた表から、スペースを補完して整形する。
これは(1)のalign.vimの操作。 ビジュアルモードで整形したい表を選択し、<Leader>tsp

[縦棒で区切る] これは、(2)の独自キーマップの操作。
ビジュアルモードで整形したい表を選択し、,t

その他の操作については、以下ページを参照。

4.文書構造の入れ替え

ここでは、まず選択を容易にするために、textobj-indentを使えるようにする。
そのあと、インデント幅を調整する左右の移動を容易にする。
文書の前後関係を調整するための、上下の移動については、スライドする方式と折りたたみ機能を使った方式を考える。

(1)領域の選択

vimの基本機能で、空行で挟まれた行は、段落として認識されるので、vipかvapで一気に選択できる。 vipはカーソル位置がそのまま、vapで選んだ場合は選択領域の最終行にカーソルが移動する。

インデント量が同じ領域を一気に選択するには、textobj-indentを使う。 textobj-indentには設定は特にない。操作方法は、以下のとおり。(最後の文字は、i(アイ)の大文字か小文字である)

vii カレントの行のインデントレベルと、それ以下のレベルの行を選択する。空行があればそこで止まる。
viI カレントの行のインデントレベルと同じレベルの行を選択する。空行があればそこで止まる。
vai カレントの行のインデントレベルと、それ以下のレベルの行を選択する。空行があっても止まらず、上位のレベルの行で止まる。
vaI カレントの行のインデントレベルと同じレベルの行を選択する。空行があっても止まらず、上位もしくは下位のレベルの行で止まる。

(2)左右の移動

こうして選択したした領域の、インデントの幅を変更するには、標準でも< >のキーを使うと、その領域のインデント量をshiftwidthの分だけ増減してくれる。しかし、変更が一回終わると、領域選択が解除されてしまい、連続的に移動することができない。そこで、以下のキーマップを.vimrcに追記することで、領域選択がキャンセルさなくなり、連続して移動させられる。

" continuous indent block in visualmode
vnoremap < <gv
vnoremap > >gv

なお、tab幅については、下記参考ページのはてな技術勉強会のページに詳しい。
ぼくは、以下のように設定してある。

set expandtab
set tabstop=2
set softtabstop=2
set shiftwidth=2

(3)上下の移動 スライド方式

選択した領域をddで消して、任意の場所にpで貼り付けてもよいのだが、その方法は、はっきりと、ここをここに移したい、と決まっている場合。
構成を考えながら、あっちにおいてみたり、こっちにおいてみたりしてみたい。org-modeでは、選択範囲を一行ずつスライドしていくことができたので、vimでも、それを実現した。
以下のvimスクリプトを.vimrcに組み込む。(下記、参考ページにあるtacahiroyさん作成)
下記のキーマップでは、ビジュアル選択状態でCTRL+pで一行上に、CTRL+nで一行下に、選択ブロックが移動する。

" continuous move block in visualmode
function! s:move_block(d) range
  let cnt = a:lastline - a:firstline

  if a:d ==# 'u'
    let sign = '-'
    let cnt = 2
  else
    let sign = '+'
    let cnt += 1
  endif

  execute printf('%d,%dmove%s%d', a:firstline, a:lastline, sign, cnt)
endfunction

vnoremap <C-n> :call <SID>move_block('d')<Cr>==gv
vnoremap <C-p> :call <SID>move_block('u')<Cr>==gv

(4)畳込み(fold)の活用

vimには、あるルールで行を畳み込み、表題だけみせる機能がある。それを使い、文書構造全体を見回せるように表示する。
畳み込みルールは、中括弧3つを入力し、それで領域を認識させる方法(marker)と、インデント幅で認識させる方法(indent)がある。ぼくは自由に指定できるmarkerを使っている。
次に、左端に畳み込みレベルのマークを表示する。ここでは第5レベルまで表示とした。

set foldmethod=marker
set foldcolumn=5

使い方は以下。

za 畳み込みのopenとcloseをトグルで切り替える。
zo/zO 畳み込みを開く。大文字だと再起的に開く。
zc/zC 畳み込みを閉じる。
zr/zR 全ての畳み込みを開く。
zm/zM 全ての畳み込みを閉じる。
zf 畳み込み印を付与する。
zd 対応する折り畳み印を削除する。

(5)FoldCCの設定

foldCCの設定。畳み込みしたときの表示テキストを、FoldCCのものにする。(するとレベルや行数が表示されるようになる)

set foldtext=FoldCCtext()

(6)上下の移動 畳込み方式

畳み込むと複数行が1行に見る。そこにカーソルを持ってきて、ddで削除し、任意の位置でpで貼り付けてやると、畳み込んだ領域が全て移動することができる。
ちなみに、畳み込みをしているときに、(3)のスライド方式を使うと、畳込みの階層が崩れて逆に見にくい。

5.参考ページ

ここでは紹介しなかったが、foldで畳み込んだ表題をリスト表示し、選んだ表題にすばやくカーソル移動できるuniteのプラグインがある。(これで、表題の移動ができれば最高なのだが・・・)



sylphide_ffr31mr at 23:42コメント(0)トラックバック(0) 

2012年10月10日

普段、bashなどのシェルを使って作業をしていると、その作業履歴や出力結果を保存しておきたいときがある。
通常であれば、terminalのスクロール機能で遡って、ウィンドウマネージャの機能でコピペをすればいいのだが、それすらもマウスを使わずにやろうとすると、なかなか難しい。

VZ Editorの時代は、VZを常駐させておけば、ワンキーでバックログをエディターに取り込めたものである。

ひとつのソリューションは、screenやtmuxといった、仮想端末の仕組みを導入することであるが、それは利用形態そのものが変わってしまうため、そこまでするのは大げさだと思った。
シェルのバックログを何らかの手段で保存しておき、それを任意のタイミングでvimのバッファに渡せればいいわけで、それを実現する方法を探ってみた。
vimshellも良さげであったが、しっくりしたのは、ConqueTermというvimのプラグイン。

http://code.google.com/p/conque/
 
vimからpythonを呼び出すのは、evervimと変わらないので、早速導入。
vimを起動して、

:ConqueTerm bash

と打つと、bashでシェル画面になる。
vimのインサートモードでシェルが動いているので、<ESC><Enter>と打つと、インサートモードを抜ける。
すると、今までの出力結果が、vimのバッファ上にある、という仕組み。

以下のショートカットと設定を、.vimrcに書いておくことにした。

nnoremap <silent> ,g :ConqueTermSplit bash <CR>
let g:ConqueTerm_CWInsert = 1
 
CWinsertを1にしておくと、インサートモードからの抜け方がCtrl+wの1キーで抜けられるようになる。
また、シェル画面の開き方も、SplitやVsplitやtabが選べる。
 
これでまた、キーボードから手を離さなくてよくなった。
vim楽しい!


sylphide_ffr31mr at 22:48コメント(0)トラックバック(0) 

2012年10月09日

Mac OS Xを使い始めて、疑問に思っていたこと。
terminalを起動してbashが起動しているのに、.bashrcが反映されない。
改めて調べてみると、bashでの.bashrcは本来の設定場所ではなさそう。
.bash_profileがメインっぽい。

このページがわかりやすい。
http://d.hatena.ne.jp/takuya_1st/20110102/1293970212

ま、.cshrcの頃からの名残で、.bashrcもあるのかなと思いつつ、黙って.bash_profileで.bashrcを読み込む設定を入れた。 

参考にしたのは以下。
http://tstylestudio.com/wp/2010/10/12/158/


sylphide_ffr31mr at 21:54コメント(0)トラックバック(0) 

2012年09月09日

ぼくはEvernoteが大好きで、長年使っている。
そして、vimのカスタマイズが徐々に楽しくなってきている今日この頃である。
そこで考えるのが、vimからEvernoteを使いたい、という発想。
当然、偉大な先人がいて、Evervimというツールを作ってくれていた。
@kakkyz81さんに感謝。

サーバ作業中のログやコマンドのリストなど、テキストを一時保存する機会は多い。ひととおり作業が終わると、その結果や途中のログなどを、ブラウザのEvernoteにコピペしていたが、これで直接vim上からEvernoteに記録することができる。なんて便利!

早速、Mac OSX Mountain Lionに入れてみるものの、なかなか苦労した。 こちらのドキュメントには、

 python及び+pythonでコンパイルされたvim及び
pythonのmarkdownパッケージが必要である。 

とあるが、vimでpythonがちゃんと動いてくれなかったので、結局パッケージ管理のhomebrewを導入し、pythonを入れ、vimも入れることとなった。

ついでにOpenBrowser.vimも入れる。これはvim上からURLやメールアドレスの文字列にカーソルをおき、このプラグインを起動すると、ブラウザでそのURLを開いてくれる機能を追加する。便利だ。
これを入れておくと、Evervimからノートをブラウザで開くことができるようになる。

Evervimでできることは、とてもシンプルであり、必要最小限である。
主たる機能は、以下の6つ。(全ての機能は、上記ドキュメントを参照のこと)

:EvervimNotebookList ノートブックの一覧を表示する。
:EvervimListTags タグの一覧を表示する。
:EvervimSearchByQuery {query} 検索文字列を指定して、ヒットしたノートの一覧を表示する。
:EvervimCreateNote 新規ノートを保存するためのバッファが開かれる。
:EvervimOpenBrowser ノートをブラウザで開く。
:EvervimSetup アカウントのセットアップを行う。

これらのコマンドを、.vimrcにショートカットに定義する。 ぼくは"\"のあとのアルファベットとした。
検索文字列は、\sと打ったあと、続けて入力するようにする。

" Evervim
nnoremap <Leader>l :EvervimNotebookList<CR>
nnoremap <Leader>s :EvervimSearchByQuery<Space>
nnoremap <Leader>c :EvervimCreateNote<CR>
nnoremap <Leader>b :EvervimOpenBrowser<CR>

" open browser
nnoremap <Leader>o <Plug>(openbrowser-smart-search) 

これで環境設定は終了であるが、これはEvernoteクライアントのエディタを変更したと解釈してもよい。なんてすばらしいのでしょう。

こんどはubuntuのvimも同じ設定をしておこう。

余談であるが、vimでyankしたときに、ウィンドウシステムのクリップボードに入ってくれるといいと思ったが、今回vimを入れ直したことで、それも可能となった。 詳しくは、こちらの解説を。

vimエディタからクリップボードを利用する。

OS Xの標準vimは、+clipboardのオプションを付けてコンパイルされていなかったが、homebrewでhomebrew/dupesのリポジトリから入れたvimは、+clipboardになっていた。嬉しい。



sylphide_ffr31mr at 00:24コメント(0)トラックバック(0) 

2012年09月05日

OSXにpythonは入っているが、pipがちゃんと動かない。
homebrewを使って、改めて入れ直すことにする。
OS標準では、/usr/bin/pythonであるが、homebrewは/usr/local/binに入れてくれるので、後でpathを登録する必要がある。

1.HOMEBREWのインストール

 $ruby <(curl -fsSk https://raw.github.com/mxcl/homebrew/go)

インストール後の自己診断

 $ brew doctor
Warning: You have Macports or Fink installed.
This can cause trouble. You don't have to uninstall them, but you may like to
try temporarily moving them away, eg.

  sudo mv /opt/local ~/macports 

macportsが入っているから、消せといわれる。
ま、ディレクトリ名を変えておけばいいだろう。

 $ brew doctor
Your system is raring to brew.  

ちゃんと通った。

2.pythonのインストール

早速インストールをする。

 $ brew install python
Unsatisfied dependency: XQuartz 
Please install the latest version of XQuartz:
  https://xquartz.macosforge.org
Error: An unsatisfied requirement failed this build.  

XQuartzがないと怒られる。
pythonでX11がいるとは、驚きだがしかたない。以下からダウンロードして入れる。

3.XQuartzのインストール

以下らからISOをダウンロードして、インストーラを起動。

http://xquartz.macosforge.org/landing/

4.pipの修正

再度pythonのインストールをトライ。

 $ brew install python 

またエラーが出た。

 ==> Downloading http://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz
Already downloaded: /Library/Caches/Homebrew/pip-1.1.tar.gz
config.log was copied to /Users/terauchiyasuyuki/Library/Logs/Homebrew
Error: SHA1 mismatch
Expected: 842c4e2aff3f016feea3c6e992c7fa96e49c9aa0
Actual: 3b002db66890880ee776bbe199c3d326d8fe3d6f
Archive: /Library/Caches/Homebrew/pip-1.1.tar.gz
(To retry an incomplete download, remove the file above.) 

pipをダウンロードしたtar.gzが違うという。
いろいろ試行錯誤をしたが、結局、homebrewに登録されているハッシュ値が間違っているという結論。
以下のコマンドで、ハッシュ値を修正する。

 $ brew edit python 

変更前の23行めから26行め。

 23 class Pip < Formula
 24   url 'http://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz'
 25   sha1 '842c4e2aff3f016feea3c6e992c7fa96e49c9aa0'
 26 end 

以下のように変更。

 23 class Pip < Formula
 24   url 'http://pypi.python.org/packages/source/p/pip/pip-1.1.tar.gz'
 25   sha1 '3b002db66890880ee776bbe199c3d326d8fe3d6f'
 26 end 

5.最後、ほんとのpythonインストール

これで再度 $ brew install pythonをすると無事終了した。
PATHを/usr/local/binを優先させて。 

 $ which python
/usr/local/bin/python

$ python --version
Python 2.7.3 


sylphide_ffr31mr at 23:55コメント(0)トラックバック(0) 
記事検索
最新コメント
livedoor プロフィール
月別アーカイブ
  • ライブドアブログ