投稿

「実践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 ai...

あなたの 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も最低限の動作は覚えてお...

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がかなりすっきりしました。

またVimのビルドした

先日、技術書の添付ディスクないのファイルを開く際、そのファイルがsjisでして、しかもオレオレビルドVimのiconvが無効になっており、という…_:(´ཀ`」 ∠):_ 加えて、どうもMac標準のgccとMacPortsとかで入れたgccだと違いがあるようだったので 改めてまとめ直すことにしました。 基本的にはMac環境ですが多分Unix系ならほとんど同じはず… ソースとパッチをダウンロードして、パッチを当ててからmakeします ソースは http://www.vim.org/sources.php パッチは ftp://ftp.vim.org/pub/vim/patches/7.3/ からダウンロードします 今回はpluginで必要だったのでPythonも有効にします Pythonは全くわからないで、ただMacPortsから突っ込んだだけです さて、通常のMac環境ならパッチを当ててmakeするだけでいいのですが MacPortsでインストールしたgcc48を使ってみようと思います 正直、使ってみたかっただけなのに少し面倒だった… 環境変数はこんな感じに設定してます。 PATHの設定はむずかしい # MacPorts export PATH=/opt/local/bin:/opt/local/sbin:$PATH export MANPATH=/opt/local/man:$MANPATH # For Compiler export BOOST_ROOT=/opt/local/include/boost export CPLUS_INCLUDE_PATH=/opt/local/include:/usr/include export CPLUS_LIBRARY_PATH=/opt/local/lib:/usr/lib export C_INCLUDE_PATH=/opt/local/include:/usr/include export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:/usr/lib export LD_LIBRARY_PATH=/opt/local/lib:/usr/lib export LIBRARY_PATH=/opt/local/lib:/usr/lib #...

VimScriptで区切り文字までをサクサク削除できるやつ書いた

はい、タイトルの通りです。 普段、かなり使うコマンドの一つに以下のものがあります。 dfX - 文字Xまで削除 (Xを含む) dtX - 文字Xの前まで削除 (Xを含まない) cfX - 文字Xまで削除し、インサートモードへ (Xを含む) ctX - 文字Xの前まで削除し、インサートモードへ (Xを含まない) ランダムなアルファベットの時などは別によいのですが コードを書いていてセミコロンの前まで消したい時、閉じ括弧の前まで消したい時などがあります。 そんな時に毎回毎回同じようなコマンドを打つのは面倒です。 "."は使いますがそれでもVimを開くたびに打ち直すのすら面倒_(:3」∠ )_ ということで、現在のカーソル位置から予め設定した、任意の区切り文字まで上記の4つのコマンドを実行出来るVimScript書きました。 VimScriptの練習にもなっていいことです(・∀・)。 " 区切り文字までを削除する " @isInsert 削除後に挿入するか否か " @isInclude 区切り文字を含むか否か function! g:deleteDelimitChar(isInsert, isInclude) " 区切り文字リスト 優先順位はリストの並びごとに高→低 let l:delimitList = [';', ':', ')', '}', ']', '.', '"', ''''] let l:cursolPos = getpos('.') " 現在カーソルのある列、以降の文字列を取得(カーソル文字も含む) let l:afterCursolStr = strpart(getline(line('.')), remove(l:cursolPos, 2) - 1) " 区切り文字のいずれかがあるか検出 for l:i in l:delimitList " 区切り文字が存在すれば削除処理開...

xspim ビルド しました

イメージ
大学でアセンブラ課題がでました 大学環境だとxspimを使います。 ですが、家でやりたい時とかに面倒なので、自分のMacに入れました。 最新のだと結構かっこいいQtSpimというのがあるようなので 普通はこっちを使えばいいと思います http://spimsimulator.sourceforge.net/ 一応、大学にあわせてxspimをビルドします。 まずはソースのダウンロード http://spimsimulator.svn.sourceforge.net/viewvc/spimsimulator/ Download GNU tarballを押せばおk tar -xvf spimsimulator.tar.gz cd spimsimulator/xspim 普通に解凍し、移動します。 次にMakefileのインストール場所と例外時のファイル?とManファイルのパスを変更します。 別にしなくてもいいですが、その時はexception.sを(ディレクトリがない場合は作って)/usr/share/spimに移動させておかないと起動しません。 1080行目辺りに BIN_DIR - インストール場所 EXCEPTION_DIR - exception.sの場所 MAN_DIR - manファイルの場所 があるのでそれぞれ任意の場所に書き換えます。 exception.sはspimsimulator/CPUの中、manファイルはspimsimulator/Documentation内です。 manは詳しく知らないのですがファイル名をspim.manからspim.1のようにしておくと正常にman spimで見れました。 あとは普通にmakeです make make install パタヘネをちゃんと読みたい…

Rogue を Mac OS X で ビルドした

イメージ
先日Rogueという古い古いRPGがあって、基本の移動キーがhjklだと聞いて興味を持ったのでインストールしました。 というわけでメモです。 以下のページからRogue 5.4.4のソースを引っ張ってきてビルドしました。 Rogue なんか色々バージョンがあるようですがUNIX上の最終バージョンが5.4ということでこれにしました。 tar -xvf rogue5.4.4-src.tar.tar.gz ./configure make make install オプションはチートモードとかいろいろありましたがつけませんでした で、早速やってみたところ 死! なんかよくわからんまま死にました(´○ω○`) 意外とおもしろいかもです。

Vimの基本と考察と !

イメージ
おはようございます. もぷりです. おはようございますって言うと何時でも朝っぽくなるから良いあいさつですね. さて、某とっぷ氏が企画した Aizu Advent Calendar 3日目の記事です. Vimについて書きます. といっても、いつものような設定ファイルなどではつまらないので 私的な考察や以前からまとめて見たかったHowToVimなど書いてみます. Mac, Unix系向けです。 初学者向けですのでProVimmerや闇Vimmerの方には無用の長物でありましょう. 加えて、近いうちにAizuの地でVim勉強会を開催しようと考えていますので その時の資料にもなればいいかなあなどと考えています :) はじめに 私はVimが好きです. Vim歴は浅いですが設定をいじったりコマンドを叩いていると楽しいです. 大したプログラムは書けませんのであしからず。 なんでVim使ってるの?すぐに慣れた? と極稀に聞かれますが、そこまで深い理由があるわけではないです. 以前はWindowsでEmEditorやNotepad++など使っていました. MacやLinuxでターミナルを使い始めた時にemacsとVimという二大宗派があるらしいということを知り sshで便利だし、名前もこっちのがいい響きかなとかそんな適当な感じで使い始めた気がします. で、使ってみるとなかなか面白いし使い勝手が非常にいいわけでして… 大学にいったらこういうの得意な人とかいっぱいいるといいな、と考えていたわけですが、 残念なことに大学ではemacsがデファクトスタンダードでした. 一番初めに教わるのは環境の説明、ワークステーションのログイン、emacsの基本操作だった気がします. そんな中で、めげずに友人たちにも薦めていますがなかなか使ってくれません. 強要するものではないので仕方ないですね. あ、誤解を招かないように添えておきますが、宗教戦争をする記事ではありません. emacsも良い環境だと思います. Shell機能がとても便利そうですし、Twitterもできるし、なんかミニゲームとか入ってるし、elispとかもありますし…. どちらか片方(もしくは両方)を使いこなし、気持ち悪い指の動き(音ゲ...

型サイズ出力

いろいろ出力 #include<stdio.h> int main(void){ char a1; short a2; int a3; float a4; double a5; // 型サイズ アドレスのサイズ アドレス printf("char %d, %d, %p\n",sizeof(a1),sizeof(&a1),&a1); printf("short %d, %d, %p\n",sizeof(a2),sizeof(&a2),&a2); printf("int %d, %d, %p\n",sizeof(a3),sizeof(&a3),&a3); printf("float %d, %d, %p\n",sizeof(a4),sizeof(&a4),&a4); printf("double %d, %d, %p\n",sizeof(a5),sizeof(&a5),&a5); return 0; }

Vimで括弧の補完とそのトグル

Vimのmapについて調べると 下記の括弧保管をよく見かけます。 (* → ()* () → (*) ※アスタリスクはカーソル位置 便利な時もありますが ターミナルにコピペするときなどは邪魔です (クリップボードと連携取ればいいんだろうけど…) 使いやすいようにスクリプトを書いてコマンドで切り替えられるようにしました。 " 自動で括弧内に移動を切り替え function! g:toggleAutoBack() if(0 == g:autoBackState) inoremap {} {}<Left> inoremap [] []<Left> inoremap () ()<Left> inoremap "" ""<Left> inoremap '' ''<Left> inoremap <> <><Left> if !has('vim_starting') echo "AutoBack is ON" endif let g:autoBackState = 1 else iunmap {} iunmap [] iunmap () iunmap "" iunmap '' iunmap <> if !has('vim_starting') echo "AutoBack is OFF" endif let g:autoBackState = 0 endif endfunction " 起動時のみ自動実行 if !exists("g:autoBackState") " 初期値 let g:autoBackState = 0 call g:toggleAutoBack() endif " 括弧移動切り替え nnoremap taub :call g:toggleAutoBack()<Return...

Vimでカーソル位置などの設定保存 と .vimrc

vimrcを見なおしたら結構おかしいとこがありました… あと、Vimを開いたり閉じたりしまくりますが そのために毎回移動しなおしたり折りたたみを開いたり閉じたりは面倒です そこで以下のように設定しました。 " 設定の保存と復元 autocmd BufWinLeave * silent mkview autocmd BufWinEnter * silent loadview " 2012/10/30 修正 autocmd BufWinLeave ?* silent mkview autocmd BufWinEnter ?* silent loadview 2012/10/30追記 パターンマッチが修正前だと:helpなどにも反応してしまうので修正 Vimには セッション と ビュー というものがあります。 セッションが全ウィンドウとグローバル設定などで、ビューがウィンドウ毎のローカル設定らしいです。 簡単に言うとビュー∈セッションだろうか? 上記設定では、バッファがウィンドウから非表示になる時に発生するBufWinLeaveイベントでmkviewを使いビューを保存します。 同様に、バッファがウィンドウに表示される時に発生するBufWinEnterイベントでloadviewを使いビューを復元します。 viewはファイルごとに作成、保存され標準だと~/.vim/viewに書きだされます。 viewoptiosを設定することで保存と復元をする設定を選べます。 以下、.vimrc いろんなとこを参考にしました。 "-------------------------------------------------------------------------------" " Vim Option By mopp "-------------------------------------------------------------------------------" " viとの互換をオフ set nocompatible " バックアップ作成 set backup set backupdir=$HOME/\.vim_bac...

Mac OS X で ターミナルから関連付けアプリを開く

OS X 固有のコマンドらしいです 存外に便利なのでメモ # 関連付けられたエディタで開く open hoge.txt # TextEditで開く open -e hoge.txt # アプリケーションを指定して開く open -a /Applications/Huga.app ./hoge.txt # Finderでディレクトリを開く (カレントディレクトリにフォーカスされる) open . # Finderでhoge.txtがあるディレクトリを開く (hoge.txtにフォーカスされる) open -R ./hoge.txt # 標準入力を標準エディタに新規ファイルとして出力して開く open -f # プログラム実行結果を標準エディタに出力 ./a.out | open -f これ以外にもオプションが幾つか用意されてるようです それにしてもFinderは使いづらい…

Mac の iTerm2 と Vim の 全角記号の問題について

イメージ
たまに気になっていた事をふとググってみたら解決したのでメモメモ 普段はMacのiTerm2でVimをいじっているのですが 全角記号が 以下のようになってしまいます。 どう見ても変 Vimのオプションで >set ambiwidth=double とすると直るらしい ですが、iTermではそれだけだと不十分なので Preferences…>Profile>Text>Double-Width Charactersの Treat ambiguous-width characters as double width. にチェック そうするとちゃんと表示され、移動もできます。 あまり、そういう記号は使う機会はないですが 気になるところではありました。

reallocで動的メモリ確保

書いたのでメモ書き #include #include #include int main(void){ char *str, *strDummy, **data, **dataDummy; int i, j, sCnt = 0, lCnt = 0; // メモリ確保 str = (char *)malloc(sizeof(char)); if(str == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; } // メモリ確保 data = (char **)malloc(sizeof(char*)); if(data == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; } printf("EOFで入力終了\n"); while((*(str + sCnt)=getchar()) != EOF){ // 改行コードが来たら行の終了 if('\n' == *(str + sCnt)){ // 改行文字を終端子へ書き換え *(str + sCnt) = '\0'; // メモリを再確保 dataDummy = (char **)realloc(data, sizeof(char *)*(lCnt+1)); if(dataDummy == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; }else{ data = dataDummy; } // メモリを確保 *(data + lCnt) = (char *)malloc(sizeof(char*)*(sCnt+1)); if(*(data + lCnt) == NULL){ fprintf(stderr, "allocation is Faild\n"); return -1; } // 文...

くっきっき 作り方メモ

クッキーのメモ ずっとメールの下書きで保存してあったので この辺に書いとこうと思います。 [ノーマル] バター 100g 砂糖 80g 卵黄 1個 牛乳 大さじ2 バニラエッセンス 少々 薄力粉 150g コーンスターチ 50g ベーキングパウダー 2~3g [いちご] バター 100g 砂糖 80g 卵黄 1個 牛乳 大さじ1 バニラエッセンス 少々 いちごソース 50g ドライいちご(微塵切り) 50g 薄力粉 180g コーンスターチ 50g ベーキングパウダー 2~3g 赤色色素 適量 [チョコ] バター 100g 砂糖 80g 卵黄 1個 牛乳 大さじ2 チョコレート 50 薄力粉 180g コーンスターチ 50g ベーキングパウダー 2~3g 超簡単作り方 材料を混ぜる→頑張ってこねる→棒状にして冷やす→焼く 以上.