投稿

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よりも強めのカラーリングのつもりです。
自分のためのカラースキームなのでこれからもガンガンいじっていく予定です。

4つ目です。
先日のvimrc読書会で誰かこれをPlugin化という話が挙がっていたのでささっと…

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本体について のみだと思って 読んでいたら、コ…

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 よりいくつか引用
上の画像を見ればお分かりでしょう。
Vimのステータスラインをかっこ良くしてくれるPluginです。

以前までは、ステータスラインのカスタマイズといえばset statuslineをいじる、powerline(新版), vim-powerline(旧版) くらいの選択肢でした。

airlineはここに新たな選択肢を加えてくれました。


1. Vim script のみで実装

    新しいバージョンのpowerlineではvim以外のzshなどに適用させるためかpythonが必須となり、重くなってしまいました。
対して、airlineは高速です。
※powerlineがpythonを使う利点はしっかりとあります。


2. 他のpluginに対応
    現在、airlineは bufferlinefugitiveunitectrlpminibufexpl,gundo,undotreenerdtreetagbarsyntastic,lawrencium の Pluginに対応しています。
これらがstatuslineに表示する情報を上書きしません。
また、ここで自分のpluginに対応させたいときも簡単に設定出来るようです。
詳細は:help airline-funcrefs を参照下さい。

2013/08/21 追記
例えばuniteやvimfilerでairlineを優先するときは.vimrcに以下を追記します
let g:unite_force_overwrite_statusline = 0
let g:vimfiler_force_overwrite_statusline = 0 上記以外にも着々と対応pluginが増えているようでとてもよいですね

3. 他のカラースキームに合わせたテーマ
    有名なカラー…

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

この記事は Vim Advent Calendar 2012 の 222 日目の記事です。

みなさま、こんにちは
もぷりです。
私の住む地域では、まだまだ梅雨が続いているにもかかわらず 連日が30度超とふざけてるのか?と思うくらいにジメジメと暑いです。 「這いよれ!ニャル子さんW」も無事放送終了し、少し残念な気持ちに浸っているところになんて天気でしょうかね。
さてさて、本日の内容は Kanaさんこと、偉大なるVim神(グレートヴィムゴッド)によって作成された SmartInputSmartChr この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' : '\%([^''"][\sA-Za-z]\*\|^\|%\)\%#…

ターミナルから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っぽいとかイヤっていう人は
私は使っていませんが,こちらの設定をおすすめします

<C-K> - 上
<C-J> - 下
<C-H&…

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(buffer_name) let term_obj = conque_term#get_insta…

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() source ~/.vim/bundle/powerline/powerline/bindings/vi…

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

vimrcで書いていた関数が大きくなったのでPlugin化しました

もぷり's 孫の手
https://github.com/mopp/backscratcher

vim的には良くないのかもしれませんが
なんか、便利そうなVim Scriptを書いたら追記して行こうと思います

お陰でvimrcがかなりすっきりしました。