Inconsolata と Migu フォント
vim のカラースキーマを Solarized に変更したら、 フォントも変えたくなったので、Inconsolata と Migu 1M に変更してみました。
フォントをインストール
Inconsolata を Google Web Fontsから ダウンロードします。
次に、Migu 1Mをダウンロードします。
ダウンロードした 2 つの zip ファイル(Inconsolata と Migu 1M)を展開し、フォントをインストールします。 フォントのインストールは、ttfファイルを選択し、右クリック。 メニューから「インストール」を実行します。
FontLink
レジストリを編集します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
に、値を追加します。
右クリックして、「新規」→「複数行文字列値」を実行します。
「名前」にInconsolata
、「データ」にmigu-1m-regular.ttf
と入力します。
ここで、一度、再起動。
再起動しないとうまくいきません。
mintty の設定
.minttyrc を変更します。
FontHeight=12 Font=Inconsolata
before
after
mintty + vim で Solarized
基本的にデフォルト主義なので、シェルも zsh ではなく bash を使っているし、 .bash_profile や .vimrc もあまりいろいろ設定してないのですが、 vim のカラースキームくらい変えてみようと思い、 Solarized をセットアップしてみました。
vim の設定
自分は、Vundleを使っているので、
以下を .vimrc に追加して、:BundleInstall!
しました。
Bundle 'altercation/vim-colors-solarized'
そうしたら、以下を .vimrc に追加します。
syntax enable set background=dark set t_Co=16 colorscheme solarized
環境によっては to_Co
を設定する必要はないかもしれませんが、
自分のところは to_Co
が 8 だったので、最初うまく表示できず困りました。
マイ .vimrc → gist
mintty の設定
vim を設定しただけでは screenshotのようなキレイなカラーリングになりません。 端末の ANSI カラーを Solarized 推奨のものに変更してやります。 以下を .minttyrc に追加します。
Black=7,54,66 Red=220,50,47 Green=133,153,0 Yellow=181,137,0 Blue=38,139,210 Magenta=211,54,130 Cyan=42,161,152 White=238,232,213 BoldBlack=0,43,54 BoldRed=203,75,22 BoldGreen=88,110,117 BoldYellow=101,123,131 BoldBlue=131,148,150 BoldMagenta=108,113,196 BoldCyan=147,161,161 BoldWhite=253,246,227
シェルの設定
これで、vim でうまく Solarized のカラースキームが適用されるようになりました。
しかし、自分の環境では、vim を終了してシェルに戻った後、 Solarized の色がプロンプトやプロンプトの後に入力する文字にそのまま残ってしまい、 もとの色に戻らないという問題が発生したので、以下を .bash_profile に追加して対応しました。
PS1='\[\e[0m\]'$PS1
プロンプトを表示する前に、色をもとに戻しています。
Githubの人気言語TOP50
Top Languages · GitHubの右側の欄に 言語がリストされてあり、リンクをたどって各言語のページに行くと、
Rust is the #34 most popular language on GitHub
みたいな感じで人気順位が書いてあります。 それを取得してTIOBE風に上位50位を並べてみた。
Position | Language |
---|---|
1 | JavaScript |
2 | Ruby |
3 | Python |
4 | Java |
5 | Shell |
6 | PHP |
7 | C |
8 | C++ |
9 | Perl |
10 | Objective-C |
11 | CoffeeScript |
12 | C# |
13 | VimL |
14 | ASP |
15 | Emacs Lisp |
16 | Scala |
17 | Assembly |
18 | Haskell |
19 | ActionScript |
20 | Lua |
21 | Prolog |
22 | Groovy |
23 | Clojure |
24 | D |
25 | R |
26 | Erlang |
27 | Go |
28 | Racket |
29 | Visual Basic |
30 | Common Lisp |
31 | Matlab |
32 | Scheme |
33 | Puppet |
34 | Rust |
35 | Arduino |
36 | Tcl |
37 | PowerShell |
38 | OCaml |
39 | FORTRAN |
40 | SuperCollider |
41 | Delphi |
42 | ColdFusion |
43 | Scilab |
44 | F# |
45 | Gosu |
46 | Smalltalk |
47 | Verilog |
48 | HaXe |
49 | Ada |
50 | VHDL |
51位以下は、
- Vala, Pure Data, Objective-J, OpenEdge ABL, XQuery, Dart, Elixir, Io, Eiffel, AutoHotkey, Standard ML, Nemerle, eC, Coq, Rebol, Boo, AppleScript, Apex, Nu, ooc, Arc, Turing, DCPU-16 ASM, Julia, Factor, Opa, Kotlin, Mirah, Augeas, Parrot, Dylan, Self, Ioke, Bro, Fancy, Fantom, Nimrod, Logtalk, Ecl, Ceylon, Max
以下のスクリプトでやりました。
Cygwinでmosh (1.2系)
cgdb 文字化け
cgdbがとても便利なのですが、 CJKが通らないのでやっつけパッチを作りました。
文字化けの原因
cgdbの構造はざっくり以下のような感じです。
tty <---> ncurses <---> cgdb <---> ptmx/pts | <---> gdb | <---> readline
原因は2つほどあり、
- ビルド時の設定で、ワイド文字対応版でないncursesを使っている
- cgdbがgdbから出力を読み取り、ncursesに書き込むときの処理が8-bit cleanでない
パッチ
修正前
修正後
ソースコードの文字化けと、 gdbのrunの結果から、マルチバイト文字が消えてしまう問題がなおってます。
ビルド
ncursesw,bison,flex,readline,help2man,texinfo などが必要なので、aptやyumであらかじめインストールしておきます。
$ git clone git://github.com/i4fumi/cgdb.git $ cd cgdb $ git checkout -b topic/multi-byte-character origin/topic/multi-byte-character $ ./autogen.sh $ ./configure --prefix=/usr/local $ make $ sudo make install
ソースコードを読むときのツール
最近、もっとソースコードを読まねばと思うようになったので、 ソースを読むときに使えるツールを調べてみました。
ソースの読み方は、エディタなどで静的に読み進めるやり方と、 デバッガなどで実際にプログラムを動かしてみるやり方の2つに大別できると思います。 以下、静的解析・動的解析という視点で自分が使っているもの/使いそうなものを挙げてみます。
静的解析
タグファイルを生成してくれます。
タグファイルがあれば、エディタを使ってソースコードを読むとき、
簡単に関数定義や関数の呼び出し元にジャンプできます。
(使い方は、vim global
とかで検索)
コールグラフを生成してくれます。 コールグラフとは、関数の呼び出しスタックを一覧にしたものです。 cflowは関数の呼び出しごとにインデントして一覧を生成します。
$ cflow -m onig_parse_make_tree -bn --omit-arguments --omit-symbol-names regparse.c 1 onig_parse_make_tree() <int () at regparse.c:6199>: 2 names_clear() <int () at regparse.c:620>: 3 IS_NOT_NULL() 4 onig_st_foreach() 5 i_free_name_entry() <int () at regparse.c:447>: 6 xfree() 7 IS_NOT_NULL() 8 xfree() 9 scan_env_clear() <void () at regparse.c:925>: 10 BIT_STATUS_CLEAR() 11 parse_regexp() <int () at regparse.c:6171>: 12 fetch_token() <int () at regparse.c:3236>: 13 PFETCH() 14 IS_MC_ESC_CODE() 15 IS_SYNTAX_OP() 16 PPEEK_IS() 17 IS_SYNTAX_OP2() 18 fetch_range_quantifier() <int () at regparse.c:2347>: 19 IS_SYNTAX_BV() 20 onig_scan_unsigned_number() <int () at regparse.c:1601>: 21 PFETCH()
(コールグラフは、gprofやvalgrindなどの動的解析ツールを使うやり方もある)
動的解析
GDBのCUIフロントエンドです。gdbをそのまま使うより、cgdbからgdbを使ったほうがいろいろ捗ります。 ただ、マルチバイト文字に対応していません。
- トレーサ
トレーサとは関数や変数の値を、実行された順に出力するツールです。
strace (1)
コマンドはシステムコールのトレーサです。
簡単に使えて便利。
ctraceは、Cのソースコードにトレース出力用のコードを埋め込みます。 ctraceが変換したソースコードをコンパイルして実行すると、トレースが出力されるという仕組みです。
自分は今のところ、あまりトレーサは使わず、printfしまくる派です。
ソースコードの読み方
青木峰郎さんの「Rubyソースコード完全解説」(通称RHG、Ruby Hacking Guide)という素晴らしすぎる本があります。 この本はたまたまRubyのソースコードを解説していますが、 なにもないところから、どうやってソースコードを読み進めていけばいいのか、 そのやり方を具体的に示した指南書だと思います。
全文が公開されています。神!
テスト
見出し H1
見出し H2
見出し H3
段落
あああああ あああああ あああああ
あああ あああ あああ
強調
Some of these words are emphasized. Some of these words are emphasized also.
Use two asterisks for strong emphasis. Or, if you prefer, use two underscores instead.
リスト
- Candy.
- Gum.
- Booze.
リンク
This is an example link.
blockquote
あああああ あああああ あああああ
pre + code
4スペースもしくは1タブ
<blockquote>
<p>For example.</p>
</blockquote>
code
バッククォート <span>foo</span>
Fenced code blocks
あああ あああ あああ
シンタックスハイライト
require 'redcarpet' markdown = Redcarpet.new("Hello World!") puts markdown.to_html
Automatic Escaping for Special Characters
4 < 5
©
strong