サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
h1mesuke.hatenadiary.org
カレントディレクトリ内の、拡張子が ".txt" の全ファイルについて、文字列 OLD を NEW に置換したい場合、 sed sed -i.bak -e 's/OLD/NEW/g' *.txt -i は in-place(その場で)の意味で、要するに上書き(書き戻し編集)の指定。 引数を付けるとバックアップファイル*1を作成する(残す)。 意味的には以下と同じ↓ for FILE in *.txt do cp $FILE $FILE.bak sed -e 's/OLD/NEW/g' $FILE.bak > $FILE done ruby ruby -i.bak -pe '$_.gsub!(/OLD/, "NEW")' *.txt -i オプションの意味は sed と同じ。 -p と -e を組み合わせると、内部では以下のように処理される↓ while $_ = gets $_.gsub!
昨年の秋頃から目立った変化のない unite-outline ですが、開発が停滞しているとか、作者のやる気がなくなった*1とかではなく、「今年の抱負 - Vimプラギン編」で述べた通り、次期バージョンの開発(準備)を少しずつ進めています。 ある程度形になったら別ブランチを切って push しようと思ってますが、まだ仕様をあれこれ考えたり非同期実行のやり方を模索している段階で、ものは全然できておりません(汗 まあ、上半期のうちに最初のバージョンを push できたらいいな、ぐらいの見込みです。*2 大きな変更が必要になるついでに、「もうこの際、たまった負債を全部返済してやる!」みたいな意気込みでして、プラグインの構成上前から気になっていた点や、作者がまずいと思っている outline info の仕様など、全面的に見直してドカンと刷新する予定です。(というか、そうせざるを得ないのです…… 詳
特に *use-cpo-save* のところ。プラグインのソースでよく見かける、 これ let s:save_cpo = &cpo set cpo&vim と、これ let &cpo = s:save_cpo がなぜ必要なのかが書いてあるよ! というか、行の継続を許容するためだったとか全然知らんかったw ということで、このイディオムの効用を勝手に誤解していた自分のプラグインでは、行の継続をばりばり使っているにも関わらず、正しく set cpo&vim していないソースが散見されたので、ここ数日それをせっせと直していました。あわわ(汗 これまでこの件でエラーの報告がきたことはないので、Vim を起動したら(意図せず) 'compatible' が ON になる、という条件*1のユーザーは極めて少ないんだとは思うけど、自作のプラグインを公開するものとして、所作は正しく身に付けておきたいものです
数万回くらい実行されるループの中で文字列が空かどうかを調べなければならないとする。 empty(str) str == "" さて、どちらがいいだろう? empty() を使う方が、文字列が空かどうかを調べる、という意図が明確になっていいような気がするが、empty() の方は関数呼び出しなので、ひょっとすると ==演算子に比べて相当遅いかも知れないぞ…… この手の疑問/迷いを解消するために、同じことをする複数の Vim script コード片の速度性能を簡単に比較できるツールを作ってみました。 h1mesuke/vim-benchmark - GitHub +reltime と +float が必要。7.2以降の Vim なら多分大丈夫(だと思うけど自信はないw) 使い方はこんな感じ。最初の疑問を解消すべく、ベンチマーク・スクリプトを作ってみる。 let s:bm = benchmark
昨日の記事で Mongoidノート - validates_uniqueness_of で :case_sensitive => false を指定すると…… - Alone Like a Rhinoceros Horn simple prefix queries (also called rooted regexps) like /^prefix/ のような場合を除きインデックスは使われない(使えない)ので、:case_sensitive => false を指定した場合、 validates_uniqueness_of は validation に際して、フィールドの値がユニークであることを保証するために、$regex を用いたクエリでコレクションの全ドキュメントをスキャンすることになる。 と書いた。 公式のドキュメント Advanced Queries - MongoDB によれば、
(この記事は Vim Advent Calendar 2011 5日目の記事です。前日は thincaさんでした!) 前々から、地味にフラストレーションを感じていたこととして、 この状態から、"word" の部分を書き換えたい場合、 this_is_a_word_in_a_very_long_identifier ↓ this_is_a_word_in_a_very_long_identifier こう選択する text-object が欲しいんだよ! というのがありました。 また、選択と同様に、 ここから、 this_is_a_word_in_a_very_long_identifier ↓ this_is_a_word_in_a_very_long_identifier this_is_a_word_in_a_very_long_identifier this_is_a_word_in
ウィンドウのサイズ/位置 ランチャ>プロパティ gnome-terminal --geometry=100x52+300+0 基本 1行は 80〜100桁以内に収める。 色 vim で背景色が白のカラースキーマ(delek)を使用する場合にいい感じになる仕様。文字が明る過ぎると読みにくいので適当に明度を下げる。文字色は黒で背景は薄い灰色、コメントは赤で予約語は青。ボールドはなし。 パレット 設定色 想定色 テキスト #000000 背景 #EBEBEB エントリ01 #000000 (Black) Black エントリ02 #8B0000 (DarkRed) DarkRed エントリ03 #006400 (DarkGreen) DarkGreen エントリ04 #525200 DarkYellow エントリ05 #00008B (DarkBlue) DarkBlue エントリ06 #8B0
unite.vim 使ってる人はみんな似たことやってるんじゃないかと思いつつ…… 現在編集中のファイルが所属するプロジェクトのトップディレクトリ*1を起点に unite.vim で file_rec する設定。([unite] は unite.vim に割り当てている prefix) これで、[unite]p とやると、プロジェクトのファイル一覧がずらずらと出てきます。後はキーを二三叩いて unite.vim おなじみの絞り込みを行えば、瞬時に目的のファイルを選択できます。 nnoremap <silent> [unite]p :<C-u>call <SID>unite_project('-start-insert')<CR> function! s:unite_project(...) let opts = (a:0 ? join(a:000, ' ') : '') let dir =
「ガベージコレクションのアルゴリズムと実装」を読了。前半の「アルゴリズム編」で GC の基本アルゴリズムを網羅的に解説し、後半の「実装編」では実際の処理系のソースを追いながら GC の実装を見てみるという構成で、非常に面白かった。 ガベージコレクションのアルゴリズムと実装 作者: 中村成洋,相川光,竹内郁雄出版社/メーカー: 秀和システム発売日: 2010/03/17メディア: 単行本購入: 25人 クリック: 810回この商品を含むブログ (94件) を見る 以下、読みながら思ったこと、メモしたことなどをまとめてみる。主に後半の「実装編」から。本書の中で解説されているバージョンは1年以上前のものなので、最新の実装にはあてはまらないかも。 Python 採用されているアルゴリズム: 参照カウント マークスイープGC(循環参照したゴミの回収用) 記述言語: C Python のエンドユーザー
ref.vim に標準添付の alc.vim を参考に、オンラインの英英辞典を引く source をいくつか作ってみました↓ ▲ ref-answers Answers.com: Wiki Q&A combined with free online dictionary, thesaurus, and encyclopedias ▲ ref-hyperdict Online Dictionary - HyperDictionary.com 英語でドキュメントを書くときは Google翻訳かエキサイト翻訳、ref-alc のお世話になりっぱなしで、実のところ英英辞典など使ったことなかったりするのですが、もっとマシな英語を書けるようになるためにも、Vim で英英辞典をさくっと引けた方がカッコいいと思い、ちょっと背伸びしてみました(笑) 正直なところ、英英辞典の良し悪しなどわからなかったりするの
前置き Webアプリのテストなど、Webブラウザを使ってのルーチンワークの自動化にしばらく FireWatir を使っていましたが、 自分でパッチ*1をあてないと NameError や NoMethodError が出る*2 自分でパッチをあてないと text field に日本語文字列を設定できない FireWatirでテキストフィールドへ日本語を挿入するパッチ - usualomaの日記 - はてな?Rubyグループ UbuntuでFireWatirを使えるようにしてみた続き。 - いまいにっき 定数への再代入の警告がわらわら((-W0 で抑制することはできるけど気持ち悪い。)) といった点が不満であったので、Watir 2.0 と目されている、Webdriverベースの watir-webdriver に乗り換えました。 watir-webdriver Watir on WebDr
Rails のセッションまわりについて調べる。知りたいのは (1) Cookie に含まれている情報からセッション(sessionメソッドの返値となるオブジェクト)を作るところと、その逆に、(2) セッションを Cookie としてレスポンスに含めるところだ。イメージとしては、 セッション ⇔ Cookie ⇔ リクエスト/レスポンス というような関係にあると思うのだが、その辺を確認したい。セッションストアは Cookie Store とする。例のごとく、参照する Rails のコードは 2.3.5 Cookie Cookie としてクライアントに送信されるセッションは以下のようになる。(sandbox はアプリケーションの名前) _sandbox_session=BAh7BjoPc2Vzc2lvbl9pZCIlN2UwZTA5MTQ2NWVjY2Q4NjYxMjBlMjI4YWEzZWM
unite-outline の関連エントリが増えてきたのでまとめ。自演乙。((ちなみに、私は長島☆自演乙☆雄一郎選手のファンです ( ̄ー ̄)bグッ!)) unite.vim で簡易アウトライン機能 一発目の紹介記事。スクリーンショットを随時追加している。 unite-outline の outline info の仕様を拡張 outline info の create_heading()関数が辞書を返せるようになったことについて。曰く、create_heading()関数はその見出しが具体的にどう表示されるかについて、関知する必要はない。 unite-outline に特定の種類の見出しを非表示にする機能を追加 g:unite_source_outline_ignore_heading_types という、長い名前のオプション変数を追加した経緯やら。 unite-outline が見出し
現在 alignta*1 を使っている人向けの記事です。 version 0.2.0 で shifting alignment による整列の仕様や整列オプションの指定書式が一部変更になりました。他にも追加された機能やなくなった変数があったりするので、主な変更点をここにまとめておきます。 Padding Alignment {L-fld-align}, {M-fld-align} を複数指定できるようにした 複数マッチがある場合の {L-fld-align}, {M-fld-align}((最初のマッチの右側がすなわち 2番目のマッチの左側であるので、Left field とか Right field という考え方自体わかりにくいのですが、以下のようなイメージでとらえるとわかりやすいと思います↓ L, M, [L, M, [L, M, [...[L, M, R]...]]])) を個別に指定
最初のリリースからちょうど一年が経過した Nicovideo Results Filter ですが、誠に勝手ながら現在のバージョン(0.2.7_2010-11-21)をもって開発を終了させていただきます。今後、ニコニコ動画の方でページの仕様変更などがあり、スクリプトが動作しなくなっても対応できませんのでご了承ください。 また、これに関連して、Greasemonkeyスクリプトに設定画面を提供するライブラリとして開発を進めていた USConfig も開発を終了させていただきます。これは元々 GM_config の代替として Nicovideo Results Filter で使うために書いたものであり、自分としては今後これを使った Greasemonkeyスクリプトを書く予定もないので、NRF の開発終了を期に機に、こちらも開発終了とさせていただきます。 事情、あるいは理由 ある日突然ページ
Rubyインターフェースを使い、ファイルのパスをゴニョゴニョするための一連のユーティリティ関数を書いてみた。それぐらい Vim script で書けよ、というものが大半*1だけど、一度使ってみたかったということもあり、練習も兼ねて。ていうか、色々と楽でいいやw*2 if has("ruby") function! util#path_expand(path) ruby << EOF path = File.expand_path(VIM.evaluate('a:path')) path.gsub!(/(["\\])/) { '\\' + $1 } VIM.command('let path = "' + path + '"') EOF return path endfunction function! util#path_split(path) ruby << EOF dir, base
ここでいう「アウトライン機能」とは、極々大雑把に、「ファイルの見出し一覧的なものを表示する機能」および、「見出し一覧から項目を選択することで該当個所へジャンプできる機能」、ぐらいの意味です。(世間一般において「アウトライン機能」といった場合にこれで通用するのかは自信がないので、そこは適当に) ファイルタイプごとに設定されたパターンにもとづいて見出しを抽出し、それでファイルのアウトライン表示をやる機能を前々から欲しいと思っていて、はてさてプラグインを探そうか、それとも :grep でやろうか*1と思っていたところ、id:thincaさんによる以下のエントリがタイムリーヒット。 簡単な unite の source の作り方 - 永遠に未完成 ここから簡易的なアウトライン機能までもう少しですよね。ここに、ファイルタイプごとに設定されたパターンにもとづく見出し行の抽出(フィルタ)を加えて候補を絞
前回の続き。ここまでの流れとは打って変わって話は大転回(笑) Conque を使っていよいよ本格的に Vim から zsh を使えるようになったものの、何かが劇的に変わったとか、改善されたというようなことは実は起こらなかった。わはは。 というのは、シェルを使っての本格的なオペレーションをあえて Vim から行う、ということがそもそもないからで、そんな時は新たに端末エミュレータのタブを作るという強固な習慣は治らなかった。というか、実際便利なんだな、端末エミュレータのタブ機能って。 というか、Vim のバッファと連携する必要がない(シェルを使うオペレーションの大半が実はそう)のなら、そもそもそれを Vim からやる必然性もないのであって、そう考えると「Vim上で動かすシェル」として一番求められるのは「Vim のバッファとの連携に優れたシェル」であり、「普段使っているのと同じシェル」ではないわけ
「javascript indent in vim - gnarl、技術メモ<s>ho<marquee>ge’”¥ 」様より継承したものを自分好みにちょっと改造してみました。 主な変更点は、以下の通りです。(制約事項については「後書き」を参照) 1、式の途中での改行 演算子の後で改行するとインデントするようにしました。長い式を途中で改行した場合に継続行がインデントされます。 1 + 2 + 3; baka; 演算子には「.」も含まれますので、メソッドチェーンの途中で改行した場合も同様にインデントされます。 aaa.bbb. ccc.ddd; baka; 2、リスト途中での改行 関数の引数リストなど、「,」の後で改行するとインデントするようにしました。長いリストの途中で改行した場合に継続行がインデントされます。 aaa(bbb, ccc, ddd); baka; [aaa, bbb, ccc
vimfiler導入メモの続き。結論から言うと、 :shell でいいや。 ということになってしまいました。そういう結論に至った経緯について、 Vim-users.jp - Hack #142: Vimでシェルを起動する に書かれている「:shell の欠点」などを引きつつ、vimshell を使ってみて素朴に感じたことを書いてみます。 追記 そもそもの問題意識であった「シェルとのシームレスな連携」において、この「:shell でいいや」はほとんど思考停止であったので、↓にもあるようなあまり格好良くない点をどうにかしようと、最終的に Conque を入れるに至りました。(2010-06-16) では本文↓ zsh は強い Vim-users.jp - Hack #142: Vimでシェルを起動する Linux上のGVimではエスケープシーケンスを解釈しない上、WindowsのGVimでは邪
Vim付属のスペルチェック機能を使う上で、とりあえずこれだけ覚えておけば OK、というコマンドを表にまとめてみました。(Vim付属のスペルチェック機能は、Vim が +syntax付きでビルドされていなければ使えません。+syntax の有無は vim --version で確認できます。) コマンド 機能 :set spell スペルチェック機能を ON :set nospell スペルチェック機能を OFF ]s 次のスペルミスの箇所へ移動 [s 前のスペルミスの箇所へ移動 z= 正しいスペルの候補を表示し、選択した単語でスペルミスを修正 zg カーソル下の単語を正しいスペルとして辞書登録 zw カーソル下の単語を誤ったスペルとして辞書登録 :set spell でスペルチェック機能を ON にします。これにより、スペルミスがハイライトされるようになります。 ▲あ! fixed を間違
タイトルだけ見ても何のことやらわからないと思いますが…… ほら貝というのは Conque のことです。(余談参照) 「シェルを求めて三千里〜悠久のvim編〜」の続編です。導入以来ぼちぼちと固めてきた Conque の設定を晒してみます。 端末エミュレータとして Conque はよくできたプラグインなのですが、作成した端末バッファを管理する機能などはないため、 シェルを出したり隠したり 複数のシェルを管理する といった機能を自分で補っています。 端末バッファは再利用する Conque の端末バッファ(:ConqueTerm などで作成したバッファ)では、作成時に起動したプロセスは一度起動したら最後、終了後もゾンビプロセスとして残り続けます。これは Vim を終了するまで回収されません。よって、ゾンビを大量生産しないために、端末バッファは基本、一度作成したら Vim を終了するまで削除せず、可
タイトルに深い意味はありません。 さて、vim強化月間ということで、vim による開発作業の能率を上げるべく、色んなプラグインに手を出してあれこれ試しています。中でも、「vim とシェルとのシームレスな連携」はひとつの大きな課題であって、自分が vim を使う上でイケてない部分でもあるので、なんとかここを改善しようとここ数日あれこれ模索していました。 :shell vs vimshell @端末世界 vimshell まず、シェルとのシームレスな連携というと、vim のバッファの中でシェルが動いて欲しい、というのがあります。ウィンドウを分割して上半分が編集中のソース、下半分がシェル、というような感じ。これなら、双方ともに vim のバッファなわけですから、コマンドライン編集に vim の機能が使えたり、シェルで実行したコマンドの出力も、通常の vim のバッファ間コピペ(y と p)で持っ
重要なお知らせ USConfig の開発は終了しました。(2011-01-11) h1mesuke's usconfig at master - GitHub GitHub に置いておいたので興味のある人は使ってみて下さい。特に、同種のライブラリである GM_config を既に使っていて、 コントロールのレイアウトが自由にできない コントロールの位置が揃わない 設定画面がたまに出ない といった点に不満を感じている方にお勧めです。 開発の経緯 上に挙げた GM_config に対する不満点を解消した上で、GM_config を置き換えるべく開発しました。目標は GM_config の対抗馬となること、そしてより使いやすいライブラリを提供することです。 Greasemonkeyスクリプトに設定画面を付加する方法としては他に jQuery を利用する方法などもあるようですが、導入の敷居などを考
一連の Vim Hacks を読んでかなりパワーアップしたので、自分の vimrc から検索/置換系コマンドのキーマップを抜き出して晒してみます。 置換コマンドは eregex.vim のもの(:S)を使っています。Perl/Ruby互換の正規表現の書き方ができ、メタキャラクタとしての「()」「|」「+」などをエスケープしなくていいので便利です。*1 eregex.vim 置換のためのキーマップはよく使うものは1打で実行できるようにしてあり、それ以外の場合は prefix に続いて「s」で <cword> に対し完全一致、「g」で部分一致で置換対象にします。検索とのアナロジーでいくと「*」と「g」にしたいところですが、「*」は押しにくいので substitute の「s」にしました。 置換の対象範囲は prefix で決まり、「,」でバッファ全体、「,v」で直前の選択範囲、「<Leader
前回は Rails とはなんの関係もない Cookie そのもののお勉強だったが、今回からは Rails のコードを追いかけながらやる。Rails 3 旋風が吹き荒れる中、粛々と 2.3.5 のコードを読む。*1 AWDR2 をひも解く。(括弧で囲んだ数字は自分で入れた) Rails では、便利でシンプルなインタフェースで cookie を抽象化しています。コントローラ属性の cookies は、cookie のプロトコルをラップするハッシュに似たオブジェクトです。(1)リクエストが来ると、ブラウザからアプリケーションに送信された cookie の名前と値で、cookies オブジェクトが初期化されます。アプリケーションは、いつでも新しいキー/値のペアを cookies オブジェクトに追加できます。(2)これらは、リクエストの初期化が終わるとブラウザに送信されます。 (1), (2) に該
vimfiler 入れたとつぶやいたら作者に見つかって感想を書くことになったでござるの巻 というわけで vimfiler導入時のメモから使ってみた感想を書き起こしてみました。 とりあえず自分の vimmerレベルやら環境のことを書いて、そこから導入の経緯についてさらっと述べ、導入時のつまづきや期待した動作と違って戸惑った点などについて書いています。何かの足しになれば幸いですが、好き勝手なことを書いてますので、あまり期待しないで、寛容の精神を持ってお読み下さいw 自分のこと、環境、導入の経緯 僕自身は数年前に Emacs から転向した vim使いです。生粋の vimmer を自認できるほど使いこなしているとは言い難い、が自己評価。もっぱら Ubuntu で端末上の vim のみを使い、(今のところ)screen は使っていません。gnome-terminal のタブいっぱいな状況で開発作業を
感想文の副産物 「プログラムノ~ト:VimFilerのデフォルトキーバインドまとめ」の焼き直しですが、デフォルトキーバインドのアップデートをフォローしつつ、機能別に整理してみました。キーバインドはもちろん各自で自由に設定できますので、キーバインドのまとめそれ自体にはあまり意味はありませんが、vimfiler の機能を概観するには役立つだろうと思います。 現時点*1で用意されている機能はすべて網羅していると思いますが、漏れがありましたらツッコミお願いします。 起動/終了 :VimFiler で起動。netrw を置き換えるように設定していれば :e . でも vimfiler が起動する。 キー 機能 o 別の vimfiler を起動 既に二画面になっているときはディレクトリを同期 (他方の vimfiler を現在の vimfiler に同期) O 別の vimfiler とディレクトリ
公開停止しました インストール用リンクを削除(追記:2011-11-19) 自分の過去のエントリを読み返すたびに、その脚注の読みにくさが気になっていたので*1作ってみました。というか、作って公開しようという段になって既に同じものがあること知りました……orz 風柳亭: はてなダイアリーの脚注をその場で見るためのGreasemonkey/SeaHorse でもまあ、作ってしまったので公開します。脚注番号(*1 とか)にマウスを重ねると、その脚注の内容がそこに展開されます。 ↓展開! 今のところ、 はてなダイアリー Wikipedia の脚注に対応しています。インストールは以下のリンクから↓ footnote_expander.user.js 「ここのブログ/Wiki サービスの脚注も展開できるようにして欲しい」といった要望があればコメント欄の方へお願いします。対応できるかも知れません。 更新
次のページ
このページを最初にブックマークしてみませんか?
『h1mesuke.hatenadiary.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く