タグ

ブックマーク / boxnos.hatenablog.com (55)

  • ボクノス - VimのヤバすぎコメントプラグインNERD Commenter

    昨日見つけたコメントプラグインNERD Commenterですが、かなりの高機能っぷりに驚いてます。ヤバイ。 これだけは覚えておけ c コメントのトグル printf("Hello, NERD"); ここで、c /* printf("Hello, NERD"); */ もう一回c printf("Hello, NERD"); いえぃ! セクシーにコメントアウト cs /* * printf("Hello, NERD"); */ やっほぉい。 C言語系でしか使えませんが、ネストしててもコメントアウト出来ちゃう高機能っぷり。凄いっす。 末尾にコメント cA printf("Hello, NERD"); /* */ おぉぉぉぉ。Iもあります。 コメントの削除 cu 無いと困ります。驚いたことにセクシーも消えます。 他にも色々出来るみたい。 設定例 let NERDSpaceDelims = 1

    ボクノス - VimのヤバすぎコメントプラグインNERD Commenter
  • バイナリエディタbvi入れてみた。 - ボクノス

    Vimのバイナリモードは激しく使いにくいので、viライクなバイナリエディタbvi入れてみた。 BVI - Binary VIsual editor fedoraのパッケージには無かったので、ソースコンパイルした。 基的な使い方 viライクです。 hjklで移動。 TAB移動が便利。 /,?で検索も出来る。 BVI: Quick Tutorial を見ると、かなり高機能らしい。熟読しとこう〜。 ヘルプの見かた :!でシェルが起動出来るので、manを呼ぶ。 :!man bvi大体生きていけると思う。 編集する インサートモードはデフォルトでOFFになってるので、 :set memmoveとする必要がある。 :set mmでも良い。iで編集開始!! 設定ファイル .bvircに set mm set cm=16と書いておけば、大体意図したとおりに動くと思う。 ソースをちょっと読んでみた 「wc

    バイナリエディタbvi入れてみた。 - ボクノス
    yheld
    yheld 2007/09/11
  • VimでRand - ボクノス

    Vimにrandがないっぽい。 function! Rand(n) exe 'ruby VIM::command("return #{rand(' . a:n . ')}")' endfunc :echo Rand(1000000000) 118960377returnまで書けちゃった・・・VIM::command強力過ぎる!! Rubyのrandもメルセンヌツイスタと強力。

    VimでRand - ボクノス
    yheld
    yheld 2007/09/07
    おーexeなんてあるのかー
  • Vim上でRubyを動かしたい。 - ボクノス

    Vim上でirbみたいな事が出来たら素敵かなぁと思って、こんなスクリプト作ってみた。 概要 Vim上でのRuby開発を加速させます(たぶん) 組込みRubyを使ってVim上でirbみたいな事ができます。 ノーマルモードで「ctrl + enter」すると、カーソル下の行実行 ビジュアルモードで「ctrl + enter」すると、選択範囲の実行 matchit.vimがあるとブロック実行出来て更に幸せです。 インストール ~/.vim/after/ftplugin/ruby.vim辺りに保存しておいて、再起動。 nmap <buffer> <C-CR> :call <SID>Eval(function("<SID>YankNormal"))<CR> vmap <buffer> <C-CR> :call <SID>EvalVisual()<CR> execute 'ruby vim_bind

    Vim上でRubyを動かしたい。 - ボクノス
  • Rubyで自己書換えプログラムを作る。 - ボクノス

    なんとなく。 % ruby -e 'ex = lambda{|e| puts e}; b = binding; STDIN.each{|l| ex.call(eval(l, b))}' 1 + 2 3 ex = lambda{|e| print "=> "; puts e} # ex update #<Proc:0xb7f40a58@-e:1> 1 + 2 => 3 ex = lambda{|e| print "=> "; puts e; print ": "} => #<Proc:0xb7f40760@-e:1> => nil : 1 + 2 => 3 : evalで自分自身を書換えながらプログラムを進化させることが出来る。

    Rubyで自己書換えプログラムを作る。 - ボクノス
  • K&Rを読もう(30) 2.9 2進数のダンプをマクロで - ボクノス

    2.9はビット演算子の解説です。 ビット演算といえば2進数のダンプが欲しくなる。 型ごとに関数を作るのが面倒なので、マクロを活用してみた。 #include <stdio.h> #include <stdlib.h> #define dump(type, bin) \ do { \ int i; \ for (i = sizeof (type) * 8 - 1; i >= 0; i--) \ putchar('0' + ((bin) >> i & 0x01)); \ puts(""); \ } while (0) int main(void) { short mode = 0644; short mode_x = mode | 0111; dump(short, mode); dump(short, mode_x); dump(short, mode_x & ~0111); printf(

    K&Rを読もう(30) 2.9 2進数のダンプをマクロで - ボクノス
    yheld
    yheld 2007/09/07
  • 値の変更が出来る文字列についての格闘期。 - ボクノス

    ちょっとはまって調べてみたら、もっとはまってしまった・・・。値の変更が出来る文字列についての格闘記。 値の変更について func(char *s) { *s = 'a' } func("moge"); というアホなプログラムを書いてしまった・・・値が変更が出来る訳が無い!! なんとなく気になったので、値の変更について調べることにした。 値の変更について調べてみた。 strcpyで値をコピーしてみる。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char s1[] = "hoge"; const char s2[] = "piyo"; /* 普通 */ strcpy(s1, "copy"); printf("%s\n", s1); /* 警告は出るけど値の変更はできる */ strcp

    値の変更が出来る文字列についての格闘期。 - ボクノス
  • K&Rを読もう(28) 問題2-5 文字のマッチング - ボクノス

    2-4より先に2-5をやる。 文字列のマッチングをして、一致する文字の位置を返す問題。 mixi時代にkusakabeさんに激しく突っ込まれたのでよく覚えてる。 #include <stdio.h> #include <stdlib.h> int any(char *s, char *match) { int i = 0; char *sp; char *mp; for (;*s != '\0'; s++, i++) { if (*s == *match) { sp = s; mp = match; for (;*sp == *mp; sp++, mp++) ; if (*mp == '\0') return i; } } return -1; } int main(void) { printf("%d\n", any("01234567", "345")); /* 3 */ printf

    K&Rを読もう(28) 問題2-5 文字のマッチング - ボクノス
  • GNU catを読む - 全体的な流れ - ボクノス

    GNU catのソース読んでます。長くなってきたので分割しました。 ソースコードのありか オンラインで見るときはCVSを sources Index of /coreutils/coreutils/src ソースはftpからゲットせよ。 Coreutils - GNU core utilities グローバル グローバル変数static int input_descが入力ファイルディスクリプタ。超重要。 小さな関数 usageの処理はGNU定番の超絶テク。必見。 行番号の処理が凄い。写経しよう。 解析結果 -> ボクノス - GNU catを読む - next_line_num()編 main() getopt_longは定番の処理。 fstat (STDOUT_FILENO, &stat_buf)の意味がイマイチわからん。STDOUTのfstat??何が出てくる?? 調べた。cat >

    GNU catを読む - 全体的な流れ - ボクノス
  • GNU catを読む - next_line_num()編 - ボクノス

    昨日、catのソースを読んでいて謎だったnext_line_num()の処理を解析してみた。 実際の動作を確認する。 cat -nで行番号表示が出来る。 % cat -n next_line_num.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define LINE_COUNTER_BUF_LEN 20 5 static char line_buf[LINE_COUNTER_BUF_LEN] =表示桁数が固定なのが痛いが、catで行番号を表示することはまず無さそうなので、こんなもんかなぁと思う。 解析してみる。 next_line_num()を抜き出して遊んでみた結果。 解析結果はコメントに書いた。 #include <stdio.h> #include <stdlib.h> // 頭悪すぎコメント。 /* Buffer for li

    GNU catを読む - next_line_num()編 - ボクノス
  • Hacking Vim欲しい!! - ボクノス

    Vimってなかなか無いんですよね・・・世界中で使われてるグレイトなエディタなのに〜なぜだぁぁぁ!! と思ってたら、でた、でた、でたぁぁぁ〜Vim7!! (洋書だけど) Hacking Vim: A Cookbook to Get the Most Out of the Latest Vim Editor 作者: Kim Schulz出版社/メーカー: Packt Publishing発売日: 2007/05/18メディア: ペーパーバック購入: 2人 クリック: 122回この商品を含むブログ (3件) を見る Cookbook形式なので欲しいとこだけ拾い読み出来そう。Vim7対応で新機能の解説があるのが魅力。ただ、ページ数が228ページで7019円!! うぅぅぅ。たけぇ。欲しいけど、高い。しかも洋書。迷う。迷うなぁ・・・ あ、サンプルページはvim onlineからのリンクにありまし

    Hacking Vim欲しい!! - ボクノス
  • catで標準入力と連結 - ボクノス

    catコマンドはじゃなかった。catはファイルを連結出来る。そう、catはconcatenateの略なのだ!! と、今日改めて感じたのでメモ。 ふつうの使い方。 % cat hoge.txt ほげほげ % cat moge.txt もげもげスゲーふつう。 2つのファイルを連結する。 % cat hoge.txt moge.txt ほげほげ もげもげこれが来の使い方・・・ではなかった。 標準入力と連結する。 これこそ来の使い方。-で標準入力をファイルに指定する。 % echo hoge | cat hoge.txt - moge.txt ほげほげ hoge もげもげスゲー便利。簡易テンプレートエンジンに化ける。 結構使えるのが、ファイルの先頭にリダイレクトしたくなっちゃうとき。 % echo ほげほげ | cat - moge.txt > append.txtすげー便利。 応用範囲は広

    catで標準入力と連結 - ボクノス
    yheld
    yheld 2007/08/06
    >% echo hoge | cat hoge.txt - moge.txt, へぇ・・・((echo hoge | (cat hoge.txt))) - moge.txt こう解釈されるワケか。
  • チャーチ数で対数の世界を作る。 - ボクノス

    チャーチ数 0 1 2 3 4 5 ... 僕等が普段接している世界は自然数の世界だ。 0 0に1を足して1 0に1を足して1を足して2 0に1を足して1を足して1を足して3ラムダ計算を生み出したチャーチは、自然数の世界を抽象的に捉えた。 xはzero xにfをしてone xにfをしてfをしてtwo xにfをしてfをしてfをしてthreeschemeに直すとこうだ。 (define zero (lambda (f) (lambda (x) x))) (define one (lambda (f) (lambda (x) (f x)))) (define two (lambda (f) (lambda (x) (f (f x))))) (define three (lambda (f) (lambda (x) (f (f (f x)))))) xにfを何回適用したか。というのがチャーチ数であ

    チャーチ数で対数の世界を作る。 - ボクノス
  • K&Rを読もう(22) 演習2-1 変数の範囲 - ボクノス

    演習2-1 変数の範囲を調べる問題。 面倒なのでマクロで自動生成してみた。 #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <float.h> #define UCHAR_MIN 0 #define USHRT_MIN 0 #define UINT_MIN 0 #define size(s, t, S) printf("%-15s : %2d byte %2d bit %16" #t "%16" #t "\n", \ #s, sizeof (s), sizeof (s) * 8, S ## _MIN, S ## _MAX) int main(void) { size(unsigned char, d, UCHAR); size(char, d, CHAR); size(unsigned short, d

    K&Rを読もう(22) 演習2-1 変数の範囲 - ボクノス
  • C言語にもboolがあった。 - ボクノス

    最近cflowの便利さに気づいたtanakaです。 % cflow cat.c | grep ':$' | sed 's/<.*//' main() usage() simple_cat() cat() write_pending() next_line_num()コールグラフが一目瞭然でっす。超便利。 便利過ぎなので関数のみ抽出するシェルスクリプト作った。 fflow() { cflow $@ | grep ':$' | sed 's/ <.*//' } やばい。死ねる。 boolって何よ? で、cflowのテストにGNU catのソースを使ってみたら、思わぬ拾い物。 bool ok = true; boolにtrue。なんだコレ? マクロの正体は、 #include <stdbool.h> 調べてみたら、標準Cライブラリの実装 stdbool.hあった。どうやらC99からの新機能らしい

    C言語にもboolがあった。 - ボクノス
    yheld
    yheld 2007/08/05
    うっはwwwすっげぇ便利w
  • sgrepメモ。 - ボクノス

    sgrep凄すぎ。 Sgrep - Home page ダウンロード。 メモ帳 - sgrep sgrepの使い方 C言語のコメント抽出 C言語のコメントを抽出してみよう。 % sgrep '"/*" .. "*/"' ex-1-23.c /***************************************** * * ex-1-23.c * *****************************************//* 現在の文字 *//* 1文字先読み*//* 読み飛ばす */grepというよりは選択範囲の切り取りに近い動作をする。しかも複数行で。 さて、改行が無いと悲しくなるので「-o "%r\n"」で改行追加。 % sgrep -o '%r\n' '"/*" .. "*/"' ex-1-23.c /*******************************

    sgrepメモ。 - ボクノス
    yheld
    yheld 2007/07/29
  • K&Rを読もう(14) 演習 1-21 スマートタブ - ボクノス

    GNUインデント 世の中には様々なインデント方式がある。その中でも最も奇妙なインデント方式がGNUであろうと思う。 最初にGNU方式を目にしたときはハァ?ナンダコレ?などと思ったが、今はそのインデント方式が少し理解できるようになった。 スマートタブ さて、今回はGNUで使われているインデント方式であるスマートタブに変換せよという問題です。 「8個スペースが続いたら、tabに変換する」 という奇妙なインデント方式。tabとスペースを混在させて使っている所がポイント。 今回のソースはGNU方式で書いてみたぞ。 #include <stdio.h> #include <stdlib.h> // #define TAB "\t" // #define TAB ">-------" #define TAB "\033[1;30m>-------\033[0m" int main (void) { i

    K&Rを読もう(14) 演習 1-21 スマートタブ - ボクノス
    yheld
    yheld 2007/07/28
    >こいつら絶対頭おかしいよ!!, オレもそう思う
  • Vimのちょっとしたマクロ技。 - ボクノス

    僕がVimでデバッグするときは、 :!!と、前のコマンド実行をしているんですが、前のコマンドで:「!rm *」なんて事をしていると、ファイルをまるごと消してひどい目にあったりするので、なんか良い手はないかなぁ・・・と思ってたら、「そうだ、マクロがあった!!」 ふふ。便利な技を思いついてしまったので、Vimのマクロをキーボードの記録以外で使ってみようと思う。 マクロの使い方。 マクロの使い方を復習しておこう。 qaiほげほげ<ESC>qqでマクロ開始。次のaはレジスタ名。なんか打って、qで終了。 @a@aで、レジスタにa登録しておいたマクロを開始する。 そう、マクロには「レジスタ」を使うのだ。 :regで確認してほしい。 ってことは、 ソースにデバッグコードを埋め込んでおいて、マクロ実行すればいい!! /* 手抜きcat.c :!gcc -o cat cat.c && ./cat < cat

    Vimのちょっとしたマクロ技。 - ボクノス
  • K&Rを読もう(10) 演習1-16 これでいいのか不明。 - ボクノス

    世界中を飛び回ってみたけど演習1-16は(世界中で?)評判が悪い。問題の意味が全くわからない。 「プログラミング言語C(第2版)」第一章演習の答え を参考に書いた。(ほぼコピペ) バッファがオーバーフローした時は読み飛ばして、1行を取得せよ? int main(void) { int len; int max = 0; char line[MAX_LENGTH]; char longest[MAX_LENGTH]; int c; while ((len = getline(line, MAX_LENGTH)) > 0) { if (len == MAX_LENGTH - 1 && line[len - 1] != '\n') { // オーバーフロー中 while((c = getchar()) != EOF) { len++; if (c == '\n') // ココが正しい位置。 br

    K&Rを読もう(10) 演習1-16 これでいいのか不明。 - ボクノス
  • ハッカーと画家と英語の本 - ボクノス

    ハッカーと画家 オンラインでも読めるけど買ってみた。 ハッカーと画家 コンピュータ時代の創造者たち 作者: ポールグレアム,Paul Graham,川合史朗出版社/メーカー: オーム社発売日: 2005/01/01メディア: 単行購入: 109人 クリック: 4,884回この商品を含むブログ (582件) を見る 翻訳書なのに、英語のようなリズム感が心地よい。川合氏の素晴らしい翻訳に感動しました。 何かしたくなったら、ナイキのコマーシャルみたいにするんだ「とにかく、やる(Just do it)」 SICPとK&Rを読もう!! 勿論Paul Graham氏もSICPを読んだひとり。ハッカーとSICPにも強い相関関係があるらしい。 原書にリンク張っとこう。 Essays 読みやすい英語。翻訳読んだ後ならなんとか読めそう。 英語 長い文章が何故読めないかって?短い文章が読めないからだ。短い

    ハッカーと画家と英語の本 - ボクノス