投稿

2013の投稿を表示しています

つくったVim PluginとつかったVim scriptのはなし

イメージ
この記事は Vim Advent Calendar 2013 の 12日目の記事です。 もう12月も半ばですね。 みなさまは年の暮れに向けていかがお過ごしでしょうか。 私の場合、Plugin作りがなかなか進まず、苦しい年末が近づいております。 さて、今回は自分で作ったPlugin4つの紹介とその時に知ったVim scriptについてのことを書こうと思います。 まずは一つ目です。 Vim scriptをVim Pluginとするにはディレクトリを分けるなど Vim Pluginとしてのルールがあります。 ですが、「あっ、これPluginにしよう!」と思った時にmkdirやtouchコマンドを連打するのは面倒です。 :help write-plugin にもある通り、Pluginとするにはディレクトリを分ける必要があります。 直ぐにパッと作って行きたい、Pluginを作りはじめるまでをカイゼンしようというわけです。 そんなときに使うために作ったのがこれです。 mopp/layoutplugin.vim Vimからディレクトリ、スクリプトファイル、README.mdをパッと作ってくれます。 スクリプトファイルの中身もテンプレ的に出力してくれます。 2つ目です。 githubをふらふらしていた時にたまたま見つけた、 数年前にmattnさんが作った googlesuggest-complete-vim をneocomplete.vim向けにラップしました。 mopp/googlesuggest-source.vim 自動でgoogle補完力で入力ができます。 個人的に5分で出来たにもかかわらずなかなか面白いなあと感じております。 ただ少々不安定なのは通信をするからでしょうか… そういうときはインサートモードで<C-U>するとよいです。 3つ目です。 molokaiのような色合いが好みなのですが コメントの色など不満が幾つかあったのでmolokaiを元に自分のカラースキームを作りました。 mopp/mopkai.vim もぷかいと読んでやってください。 molokaiよりも強めのカラーリングのつもりです。 自分のためのカラースキームなのでこ

OSの超簡単なメモリ管理を実装するおはなし

この記事は  Aizu Advent Calendar 2013  6日目の記事です。 前日は「 Aizu Advent Calender 5日目(ダイエット成功したかも知れません) 」でした。 おはようございます。 もぷりです。 最近すっかり寒いですが、皆様いかがお過ごしでしょうか。 私は今、胸部に痛みを感じつつキーを叩いております。 さてさて、今年もAdventな季節がやってまいりました。 今回は自分の作ってるOSで とりあえず 実装した 簡単なメモリ管理 について書きます。 間違いなどの指摘があれば@Mopp_jpでもissuesでもなんでもよいのでぜひ言ってください。 リポジトリはこれです。 もぷりんOS まず、メモリの管理とは 「OS内でハードウェアからのメモリ情報を使って 動的なメモリ確保を行えるようにする。」 ということです。 もっと簡単に言うと 使っているのか使っていないのかを自動で判断してメモリ割り当てをしてくれる って意味です。 順を追って説明をします。 まず、OSはブートローダというOSを起動するだけ+αのソフトウェアから起動されます。 具体的にはgrubとかLILOですね。 で、このブートローダはBIOSが起動します。 BIOS → ブートローダ → OS → ζ*'ヮ')ζ<うっうー このように起動していきます。 ちなみに、もぷりんOSでは色々とめんどかったのでgrubから起動されること前提で作っています。 先に言ったように、ブートローダはOSを起動するだけ+αです。 ですが、とても大切ですので簡単に説明します。 OSの実行ファイルをデバイスから探す ↓ OSの実行ファイルをメモリに読み込む ↓ ハードウェア情報、BIOSコールの戻り値などをメモリに置いておく ↓ 読み込んだOSの実行ファイル先頭部分へジャンプ この4ステップです。 シンプルですねー(※1ステップ目以外) このOSが起動した時点で、メモリについて考えてみます。 はい、なにもないですね。 ですので、とりあえずOSはセグメントというものを設定します。 セグメントも

VimConf2013 に行ってきた話

11/16にクックパッドにて行われた VimConf2013 に参加してきました。 疲労感高まる帰りの新幹線内ですが、つらつらと感想を書いてみます。 まず、暗黒美夢王やthincaさん(ニャル子さんクリアファイルもらった!!)、ujihisaさん、ももんが(すごい)さん、derisさんをはじめとする、 ちったーやlingrでお世話になっている方々とお話させていただいたので、とても感極まりました。 また、プレゼン発表では香り屋さんの「How to suggest new features for Vim」がとてもお上手でなるほどなあと感じることが出来ました。 相手を十分に説得するに足る理由を持つこと、Bram氏へのパッチに限った話ではないので参考になります。 他の方々からももちろん、Vimへの想いを感じました。 懇親会では、うわさに聞いていた暗黒美夢王の歌も聞くことが出来ましたし、 ああ、やっぱりこの人は変態(へんしゅう)だなと再認しました。 自分も早く登壇者側にまわりたいものです。 Pluginも大量に作らなくてはいけませんですし… 今回参加できなかった人はまた次回のVimConfが行われるはずですので ぜひ参加しましょう。 最後に一言。 まったく、Vimは最高だぜ!!

「実践Vim」レビュー

イメージ
先日、kaoriyaさんから抽選で実践Vimを頂けるという企画に応募したところ 抽選して、一足先に実践Vimを手に入れました! http://www.kaoriya.net/blog/2013/08/24/ その条件としてレビューを書くことになっていますので、読んでみた感想を簡単に書いていきます。 慣れていないので拙いところはご勘弁下さい。 さて、きっとこの記事を読んでいるあなたはもう既にVimがなんなのか程度は知っていることでしょう。 結論から言います。 実践Vim 買いましょう。 とても良い本だと思います。 TIP集となっていて、目次からばーっと見て探しやすく、Vimの操作はコマンドとカーソルの動きが表形式で表されており見やすいですし、その表のおかげで試し易いです。 背面に[初級技術者向け]と書いてありますが、ある程度「Vimゥ…Vimゥ…」と言い始めた人なら手元に置いて損はしない本です。 正直に言って、私は「まあ、初心者Vimmerでは無いだろ、Vim力も575あるし」と思っていました。 ですが、読み始めて、初心者用の解説部分にさり気ないところへ手がとどくコマンドも併記していて「アッ」となることが多々ありました。 例えばビジュアルモード時のoコマンドがそうです。これは選択範囲の終点と始点をトグルしてくれます。 恥ずかしながらこれを読むまで知りませんでした。 本書は、全体的に如何にエディットするか?といったことに重点をおいているようです。 だからでしょうか、最初に「ドットの公式」といってドットコマンドについて述べています。 「Vimってこんな機能でこんなことができるんですよー」というスタイルではなく、 「Vimmerっていうのはな、こういう時はこうするのがクールなんだぜ」 という印象です。 まさに、実践的なVimの書というわけです。 個人的には第3部第8章「モーションによるファイル内の移動」がお気に入りです。 w,b,e,ge などの基本から自動マークまで書いてあります。 特に「 Vimの強力な移動手段は致死レベルの正確性で目標に到達する 」というテキストオブジェクト部分が面白いです(ニンジャの絵もありますからね)。 約7ページですがテキストオブジェクトについてきちんとわかりやすく、図

vim-airline に乗り換える5つの理由

イメージ
この記事は  Vim Advent Calendar 2012  の  263  日目の記事です。 今回はつい先日 かなり素晴らしいPluginがリリースされて、大分人気になっているようでしたので紹介します。 vim-airline ってなに? https://github.com/bling/vim-airline  より引用 https://github.com/bling/vim-airline/wiki/Screenshots  よりいくつか引用 dark theme with powerline symbols light theme solarized light 上の画像を見ればお分かりでしょう。 Vimのステータスラインをかっこ良くしてくれるPluginです。 以前までは、ステータスラインのカスタマイズといえばset statuslineをいじる、powerline(新版), vim-powerline(旧版) くらいの選択肢でした。 airlineはここに新たな選択肢を加えてくれました。 1. Vim script のみで実装     新しいバージョンのpowerlineではvim以外のzshなどに適用させるためかpythonが必須となり、重くなってしまいました。 対して、airlineは高速です。 ※powerlineがpythonを使う利点はしっかりとあります。 2. 他のpluginに対応     現在、airlineは  bufferline ,  fugitive ,  unite ,  ctrlp ,  minibufexpl , gundo , undotree ,  nerdtree ,  tagbar ,  syntastic , lawrencium  の Pluginに対応しています。 これらがstatuslineに表示する情報を上書きしません。 また、ここで自分のpluginに対応させたいときも簡単に設定出来るようです。 詳細は:help airline-funcrefs を参照下さい。 2013/08/21 追記 例えばuniteやvimfilerでairlineを優先するときは.vimrcに以下を追記します let g:uni

あなたの Vim は もっと Smart に Input できる

この記事は  Vim Advent Calendar 2012 の 222 日目の記事です。 みなさま、こんにちは もぷりです。 私の住む地域では、まだまだ梅雨が続いているにもかかわらず 連日が30度超とふざけてるのか?と思うくらいにジメジメと暑いです。 「這いよれ!ニャル子さんW」も無事放送終了し、少し残念な気持ちに浸っているところになんて天気でしょうかね。 さてさて、本日の内容は Kanaさんこと、偉大なるVim神(グレートヴィムゴッド) によって作成された SmartInput SmartChr この2つのPluginについてです。 数多のVim Pluginの中でもかなり強力なPluginだと思います。 単体でも十二分に有用ですが、それぞれの出来る事がきちんと分かれています。 それら2つを良い感じに 組み合わせて使用する 方法を紹介します。 組み合わせることで以下が出来るようになります。 SmartChrに条件を追加出来る SmartInputに繰り返させる 早速、コード例は以下です。 NeoBundleLazy 'kana/vim-smartchr', { 'autoload' : {'insert' : '1'} } NeoBundleLazy 'kana/vim-smartinput', { 'autoload' : {'insert' : '1'} } " Smartinput let s:bundle = neobundle#get('vim-smartinput') function! s:bundle.hooks.on_source(bundle)  " ***ここから!*** call smartinput#map_to_trigger('i', '%', '%', '%') call smartinput#define_rule({ \ 'at'

ターミナルからvim-refでmanが見たい

vim-ref というthincaさんの作ったPluginがあります。 各種言語のリファレンスを見ることが出来るプラグインでpydocやmanをVimから見たり、Wikipediaを検索したり、Weblioを引いたりできます。 今日、ふと ターミナルからmanで調べていたのですがVimでみたいなー と思いました。 毎回、 $ Vim :Ref man hoge と打つのは少々めんどっちいのです。 なので.zshrcに以下の関数を追加しました。 function vimman() { vim -c 'Ref man '$1 -c 'winc j' -c 'q' } これでターミナルから $vimman hoge で見れます。 ちょっとだけ便利ですね(。・ω・。)

カーソルキーさん@つかわない インサートモード編

この記事は Vim Advent Calendar 2012   104日目の記事になります。 103日目は@ujihisaさんの unite-build でした。 Vimッ!  使わずにはいられないッ! カーソルキーでエディット? 貧弱貧弱ゥ!! はい、すいません。 というわけで 以前、書いた記事にも似たようなことをチラッと書きましたが、改めてきちんと書きなおしてみます。 Vimmerであればノーマルモードにおいて、息をするよりも簡単にhjkl移動をすることだと思います しかし、インサートモードではどうでしょう? 案外カーソルキーに手を伸ばしがちですね。 私もVimを使い始めたばかりの頃はそうでした。 そもそも、インサートモードにおいてカーソルキーを連打ってしまうくらいの移動ならば <ESC>してノーマルモードで移動すべきだと思います。 Vimは音ゲーでは無いので連打なんてするべきではないのです。 標準では以下のように与えられています。 下の行へ <C-G><C-J> <C-G>j 上の行へ <C-G><C-K> <C-G>k これでは物足りませんね(゜.゜) そこで、この上記に加えるといいであろう設定を列挙します。 <C-A> - 行頭 <C-E> - 行末 <C-F> -  右 <C-B> -  左 noremap! <C-A> <Home> noremap! <C-E> <End> noremap! <C-F> <Right> noremap! <C-B> <Left> noremap! <C-D> <Del> emacsライクに設定しています 私がこの設定にしている理由はMacを常用しているからです。 Macだと結構な割合でemacs移動バインドがテキストボックス内で使えるので案外役に立つのではないでしょうか。 あと、emacsも最低限の動作は覚えておきませんと。 emacsっぽいとか

Vim から zsh を呼ぶ プラギン 紹介

イメージ
Advent Carender ぶっちぎってしまいましたねすいません(´・ω:;.:... この記事は Vim Advent Calendar 2012 : ATND 80日目の記事になります。 79日目は @rbtnnさんの 「Vimの正規表現`\%`は結構便利だよ」という話 ProVimmerの方々はVimShellをお使いのことと思いますが 既存のshellと同様に使うには最初に幾分かの設定が必要だったりします。 shellスクリプトも異なっているようですし。 自分も一時期使っていましたが、なかなか慣れずに Console Vim派でもあるので<C-Z>か:shell、普通に一旦閉じるに戻ってしまいました。 しかし、先日 なかなか良さげなプラギンを見つけたので紹介します。 Conque というターミナルのインターフェースのような感じのものです。 shell以外にもターミナル上のもの(例えばemacsなど呼び出せます) zshもzshrc, zshenvの設定のままで使えます。 ((((;゚Д゚)))) とりあえず設定を以下に NeoBundleLazy 'http://conque.googlecode.com/svn/trunk/', { 'autoload' : { 'commands' : ['ConqueTerm', 'ConqueTermSplit', 'ConqueTermTab', 'ConqueTermVSplit'] } } " Conque let g:ConqueTerm_ReadUnfocused = 1 let g:ConqueTerm_CloseOnEnd = 1 let g:ConqueTerm_StartMessages = 0 let g:ConqueTerm_CWInsert = 1 noremap <silent> <Leader>sh :ConqueTermVSplit zsh<CR> " Conque function! s:delete_ConqueTerm(buff

VimのイカしたPowerLineが新しくなってた

はい、なってましたね VimだけじゃなくてShellまでかっこよく出来るようになるとかなんとか しかし、思ったより手間だったのでメモ 以下はMacです 加えてFontへのパッチはうまく出来ませんでした fontforgeのためにhomebrewに変えるのがめんどうで… 環境は以下 Mac OS X Lion Python27(Mac標準のAppleのやつ) iTerm2 MacPorts 基本的に ここ に書いてあるとおりにすれば問題は無いはずです。 Python版のVimについては MacPortsもしくはHomeBrew、自分でビルドのどれかで入れます。 いつもどおりビルド しました。 以下の手順はドキュメントのコピペです。 portで使うpythonをappleのものに変更 もしかすると上の3つも変更後にやったほうがいいかもです Pythonを使うのでpipなるパッケージマネージャを入れて、PowerLineのインストール 上の3つはオプションでらしいですが入れておきます。 sudo port select python python27-apple pip install --user pygit2 pip install --user mercurial pip install --user psutil pip install --user git+git://github.com/Lokaltog/powerline ここでも、よくわからないのですがMacPortsでインストールしたgcc48とかだと pipのinstall時にコンパイラオプションかなんかのエラーでできませんので Mac標準のgcc42の方でやるとインストール出来ます。 pygit2はヘッダファイルあたりの関係でインストールできなかったのでしてません 一応動いたし多分大丈夫… 次に以下を.vimrcへ書き込みます " NeoBundle 'git://github.com/Lokaltog/powerline.git' python from powerline.bindings.vim import source_plugin; source_plugin() sourc

痒いとこに手が届く(気がする) Vim Plugin 作った

vimrcで書いていた関数が大きくなったのでPlugin化しました もぷり's 孫の手 https://github.com/mopp/backscratcher vim的には良くないのかもしれませんが なんか、便利そうなVim Scriptを書いたら追記して行こうと思います お陰でvimrcがかなりすっきりしました。