サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
osyo-manga.hatenadiary.org
Vim のコマンドに Vim script の式を渡す場合、いつも execute "edit ".tempname() のように :execute コマンドを使用していたんですが、『:{コマンド} `={式}`』 で式を渡すことが出来たんですね。 上記の Vim script の場合はこんな感じになります。 edit `=tempname()` これは知らんかった…。
関連 : Rubocopをsyntasticを使ってVimから自動実行する - Qiita って事で、watchdogs.vim にも Rubocop でシンタックスチェックを行う設定を追加しました。 使用するためには Rubocop のインストールと g:quickrun_config へ設定を追加する必要があります。 [Rubocop のインストール] bbatsov/rubocop - github $ gem install rubocop [設定] " Ruby で rubocop を使用するように設定 let g:quickrun_config = { \ "ruby/watchdogs_checker" : { \ "type" : "watchdogs_checker/rubocop" \ } \} Rubocop が使用できる場合はそちらをデフォルトの設定にしておいてもい
生きてました。 まだちょっと時間が取れない感じなのでまだ問題はあるんですが以前つくっていたプラグインでも公開してしまおうかなーと。 と、いうことで rcodetools を利用した Ruby のコード補完プラグインをつくってました。 [プラグイン] osyo-manga/vim-monster NeoBundle "osyo-manga/vim-monster" [gem] $ gem install rcodetools [使い方] でコード補完を開始します。 また、neocomplete.vim と併用して使用したい場合は以下のように設定しておく必要があります。 let g:neocomplete#sources#omni#input_patterns = { \ "ruby" : '[^. *\t]\.\w*\|\h\w*::', \} [その他] 一応、Ruby 2.0 でも動作す
毎回設定する度に忘れるので覚書。 書いたあとに書いたことすら忘れそうだけど さて、例えば、次のようなシンタックスハイライトを設定するとします。 " aaa を highlight Error でハイライト syntax match Error /aaa/ 上の設定を行うと こんな感じにハイライトされるんですが、この時にコメントや文字列リテラルのハイライトよりも優先してハイライトして欲しい場合があります。 [解決] こういう場合は containedin=ALL を使用することで解決する事ができます。 syntax match Error containedin=ALL /aaa/ これで他のシンタックスハイライトよりも優先してハイライトを行うことができます。 Vim のシンタックス周りは結構細かく制御する事ができるんですが、その分意図した設定をするのがむずい…。
標準ライブラリでできる範囲で書いてみました。 [ソース] #include <tuple> template<typename T, typename Uniq> struct holder{ T value; operator T(){ return value; } holder& operator =(T t){ value = t; return *this; } }; template<typename T, typename Uniq, typename ...Args> T get(holder<T, Uniq>, Args... args){ return std::get<holder<T, Uniq>>(std::make_tuple(args...)); } #include <iostream> #include <string> holder<int, struc
ああーふみふみかわいいよふみふみガチャチケ55枚突っ込んで限定R2枚しか出なかった 関連:Vim でカーソル下の単語を移動するたびにハイライトする - C++でゲームプログラミング 以前、上記の記事で書いたコードなんですが、需要があるようなのでプラグイン化しました。 と、いうか作っている途中でいろいろと二転三転してすみません…。 (特に itchyny さん、sgur さん、せっかく記事まで書いてくださったのにすみませんでした…。 [注意 spice.vim を使用してた方へ] spice.vim なんて知らん!というかたは飛ばしてください。 このプラグインは以前は spice.vim という名前で開発していたのですが、諸事情により名前を変更しました。 新しい名前は brightest.vim になります。 機能的にはほとんど変わっていませんが、設定方法はかなり変わったので移行する場合は注
Lingr の C++ 部屋で話題になったのですが、参照キャプチャしたラムダを static 変数で保持するのは未定義の動作になることがあるので注意しましょうという話。 さて、話題になっていたのは次のようなコードです。 void func(int const& i){ static auto f = [&]{ std::cout << i << std::endl; }; f(); } func(1); // => 1 func(2); // => 1 呼び出した f() は両方共 1 が出力されます。 ここで引数を int に変えてみるとどうでしょう。 // 引数を int に変更 void func(int i){ static auto f = [&]{ std::cout << i << std::endl; }; f(); } // 最初のコードと結果が違う func(1); /
Vim 7.4.338 で 'breakindent' オプションが追加されました。 このオプションは何をするのかというと 'wrap' で折り返した時に折り返された行もインデントする設定になります。 [関連] 'wrap' で折り返したときにインデントする機能が欲しい · Issue #114 · vim-jp/issues · GitHub Patch 7.4.338
少し前に unite.vim にプロンプト周りの変更が行われました。 この変更に伴い unite.vim を下に開いた場合にプロンプトが下に来るようになりました。 この時に以前と同じように『常に上部にプロンプトを表示したい』という場合は次のように unite#custom#profile() を利用します。 " デフォルトのコンテキストを -prompt-direction=top にする call unite#custom#profile('default', 'context', { 'prompt_direction': 'top'})
この記事は Vim Advent Calendar 2013 177日目の記事になります。 さて、Web から :help できるサイトをつくりました。 いつでもどこでも :help する - Vim :help 元々は Lingr から :help する為の bot として運用していたんですが、それをブラウザから行えるようにしました。 基本的には vim-jp/vimdoc-ja の日本語のドキュメントを参照して :help するようにしています。 日本語以外のドキュメントには未対応です。 また、日本語の Vim のドキュメント以外にもいくつかの Vim プラグインのドキュメントも閲覧することができます。 対応している Vim プラグインについてはこちらを参照してください。 一応、スマホとかからも見れると思いますが、ちょっと重いかも…。 その他、不具合や要望等ありましたら、github
この記事は Vim Advent Calendar 2013 175日目の記事になります。 さて、以前、矩形なオブジェクトを対象とする textobj をつくりました。 Vim Advent Calendar 2013 107日目: Vim で矩形なオブジェクトを対象とする為の textobj を書いた - C++でゲームプログラミング 上記で作った textobj は、 : カーソル位置 : 範囲 NeoBundle "Shougo/vimproc.vim" NeoBundle "Shougo/unite.vim" NeoBundle "Shougo/unite-outline" NeoBundle "Shougo/vimfiler.vim" の用に幅が同じオブジェクトに対しては有効なのですが、幅が違うオブジェクトの場合には対処できません。 " アカウント名のみヤンクしたい NeoBun
sinatra + guard + foreman + chrome で LiveReload するための環境を簡単にまとめてみました。 [必要なもの] gem foreman sinatra guard chrome Chrome Web Store - LiveReload ブラウザのリロードは Chrome の LiveReload を使用します。 1.適当なディレクトリに以下の4つのファイルを作成します。 [app.rb] require 'sinatra' require 'sinatra/reloader' if development? get '/' do "Hello, World" end [Gemfile] source :rubygems gem 'sinatra' gem 'haml' group :development do gem 'sinatra-cont
[追記] 指摘されて初めて気づいたんですが textobj が operator になっていたので修正しました…。 素で間違えて恥ずかしい。 この記事は Vim Advent Calendar 2013 167日目の記事になります。 Vim Advent Calendar 書きたい人募集中です。 興味のある方は気軽にご参加ください。 さて、今回は任意の正規表現パターンにマッチする textobj プラグインをつくりました。 もともと『任意の正規表現パターンにマッチする textobj』は vim-textobj-user の機能として備わっているんですが、それをラップして から呼び出せるようにしました。 [プラグイン] kana/vim-textobj-user osyo-manga/vim-textobj-from_regexp [使い方] textobj#from_regexp#map
この記事は Vim Advent Calendar 2013 163日目の記事になります。 今日から Vim Advent Calendar 2013 を再開します。 興味のある方は気軽にご参加ください。 さて、 というようなツイートを見かけたのですが、Vim 関連の記事や公開されている vimrc を見ていると確かに :NeoBundle 'Shougo/neobundle.vim' と書かれているのをよく見かけます。 上記のツイートでも書かれている通り neobundle.vim を neobundle.vim 自体で管理したい場合は、 :NeoBundle 'Shougo/neobundle.vim' ではなくて、 :NeoBundleFetch 'Shougo/neobundle.vim' とする必要があります。 これは『:NeoBundleで登録しておくと一時的にruntimep
最近(でもないけど)unite.vim から neomru.vim へと移行した unite-file_mru ですが、unite.vim の時に表示されていた更新時間が neomru.vim では表示されなくなりました。 これは以下のように設定することで unite.vim と同じように表示されるようになります。 let g:neomru#time_format = "(%Y/%m/%d %H:%M:%S) " ただ、mru の量が多い場合はパフォーマンス(unite-file_mru の起動時間等)に影響してくるので注意してください。
の記事は Vim Advent Calendar 2013 148日目の記事になります。 参加者募集中です。 さて、このブログでも何回か記事にしたんですが、Vim 7.4.260 にて g: から始まる関数名がエラーになるようになりました。 これは Vim 側のバグで g:foo() のような関数名でも動作していたのが修正された形になります。 ただし、その後 264 で g: + 有効な関数名(大文字から始まる関数名)であればエラーにならない修正がはいりました。 つまり最新版では g: + 大文字から始まらない関数名がエラーになります。 そんなわけで 7.4.264 現在は以下のような動作になります。 " g: + 大文字ではない関数名はエラー " これは func() が有効な関数名ではないため " function! g:func() " " endfunction " g: + 大文
最近 libclang の Python binding を使用をしようた Vim プラグインを作成しているのでその覚書としてポツポツ書いていこうかと思います。 ibclang とは Clang が提供している構文解析ツールになります。 この構文解析器は Clang から提供されている Python binding を使用することで比較的簡単に使用することができます。 諸事情により LLVM 3.3 で動作確認していますが、LLVM 3.4 でも基本的な使い方は変わらないはずです。 あと Python はあまり慣れていないので書き方など間違っている箇所があったらすみません。 [Python binding を導入する] Python binding は Clang のソースコードに付属しています。 ソースファイルはここや svn などから落としてくるとよいでしょう。 この Python b
この記事は Vim Advent Calendar 2013 136日目の記事になります。 本来は昨日の記事として書こうと思っていたんですが、諸事情により今日の記事に…。 そんなわけで「昨日のVAC書いてもいいよー」という人募集中です。 Advent Calendar とは一体… [関数の引数にデフォルト値を渡したい] さて、Vim script で次のように関数の引数にデフォルト値を渡したいことがあると思います。 function! s:func(command, name = command, mode = 0) " ... endfunction call s:func("ls") call s:func("ls", "command ls") call s:func("ls", "ls", 1) しかし、Vim script ではこういう書き方はできません。 [可変長引数を利用する
この記事は Vim Advent Calendar 2013 116日目の記事になります。 関連::NeoBundleLazy したプラグインをフォーカスが外れている時に自動的に読み込む 以前、Vim Advent Calendar で上記のような記事を書いたのですが、この機能が neobundle.vim 本体に組み込まれたので簡単に紹介でも。 NeoBundleLazy したプラグインを bold;"> Vim のフォーカスが外れている時に自動的に読み込みを行います。 挙動としてはわたしが実装したものとほとんど同じになっています。 [使い方] :NeoBundleLazy の設定に "focus" を追加する事で Vim のフォーカスが外れている時に自動的にプラグインを読み込むようになります。 また、"focus" に設定した値はプラグインを読み込む優先順位としての意味も持ち、設定した
この記事は Vim Advent Calendar 2013 112日目の記事になります。 今回は Vim script でのいくつかの関数の定義方法を紹介します。 [グローバル関数] 関数名にはアルファベットと数値と '_' を使用する事ができます。 また、関数名は大文字のアルファベットから始める必要があります。 " どこからでも呼び出す事ができる関数 function! Func() echo "global function" endfunction ここで定義した関数はどこからでも(コマンドからでも)呼び出すことができます。 [スクリプトローカル関数] スクリプトローカル関数は定義したスクリプトファイルでのみ呼び出すことができます。 スクリプトローカル関数を定義する場合は関数名を大文字ではなくて s: から始めます。 function! s:func() echo "script
この記事は Vim Advent Calendar 2013 110日目の記事になります。 1つ飛んでいるような気がしますが書きたい方がいれば教えて下さい。 さて、今回は Vim script からキー入力を呼び出す方法について簡単に書きます。 [:normal {commands} を使う] {commands} を実行します。 これは {commands} がノーマルモードからキー入力され時と同じように実行されます。 " カーソル行を "a に保存する " ! を付けた場合はマップを展開しない normal! "add " 特殊キーを含める場合は execute "\" を利用する必要がある execute "normal! :echo 42\<CR>" " <Plug> したキーマップを呼び出したり execute "normal \<Plug>(hoge)" 基本的にはこのコマンド
この記事は Vim Advent Calendar 2013 107日目の記事になります。 通常、テキストオブジェクト iw の範囲は : カーソル位置 : 範囲 NeoBundle "Shougo/vimproc.vim" NeoBundle "Shougo/unite.vim" NeoBundle "Shougo/unite-outline" NeoBundle "Shougo/vimfiler.vim" のような形になります。 これを下方向に向けて矩形の範囲を対象とするテキストオブジェクトをつくりました。 NeoBundle "Shougo/vimproc.vim" NeoBundle "Shougo/unite.vim" NeoBundle "Shougo/unite-outline" NeoBundle "Shougo/vimfiler.vim" [プラグイン] osyo-man
この記事は Vim Advent Calendar 2013 97日目の記事になります。 Twitter 見ていると『テキストオブジェクトわからん』というツイートをたまに見かけるので自分が理解している範囲で簡単に解説してみるなど。 まぁこういう記事は大量にあると思うけど わたし自身も少し前までは『テキストブジェクよくわからない』状態だったんですが、どういうものか理解してからはテキストオブジェクトが中心となって Vim を操作するようになりました。 他のエディタでは見かけない癖のある機能だと思いますが、Vim を使用しているのであればテキストオブジェクトとオペレータの関係は覚えておいた方がよいと思います。 [テキストオブジェクトとは] テキストオブジェクトを一言でいうと『任意の範囲』になります。 例えば normal モードで diw を入力すると『カーソル下の単語』が削除され、yi( で『
この記事は Vim Advent Calendar 2013 93日目の記事になります。 先週の vimrc 読書会で読んでいた vimrc で numberwidth が設定されているのを見て思いついたのでネタにします。 さて、わたしは行番号を表示しているのですが、行番号の左側に余白がないのがちょっと気になっていました。 ぴったりくっついているのは見づらい。 そこで、バッファの行数に応じて numberwidth の値を動的に変更する事で余白を設けるようにしてみました。 augroup numberwidth autocmd! autocmd BufEnter,WinEnter,BufWinEnter * let &l:numberwidth = len(line("$")) + 2 augroup END numberwidth の値をバッファの行数桁よりも +1(正確にいえば右側のス
この記事は Vim Advent Calendar 2013 88日目の記事になります。 元ネタ それ、Vim で。 と、いう事でやってみました。 [必要なプラグイン] Shougo/vimproc.vim コマンドを非同期で実行する osyo-manga/vim-watchdogs シンタックスチェックを行う jceb/vim-hier エラー箇所を波線でハイライトする dannyob/quickfixstatus カーソル位置のエラー内容をコマンドラインに出力する thinca/vim-quickrun watchdogs.vim のバックエンド osyo-manga/shabadou.vim quickrun.vim の hook 拡張 NeoBundle "Shougo/vimproc.vim" NeoBundle "thinca/vim-quickrun" NeoBundle "
この記事は Vim Advent Calendar 2013 83日目の記事になります。 元ネタ 『そういえば switch.vim ってのがあったなー』と思って前から気になっていたので簡単に試してみました。 [プラグイン] AndrewRadev/switch.vim NeoBundle "AndrewRadev/switch.vim" [設定] " 文字列リテラルをトグル " string → 'string' → "string" → string... " " string に記号が含まれている場合は " string → 'string' " の変換はうまくいかないかも let g:switch_custom_definitions = \[ \ { \ '\(\k\+\)' : '''\1''', \ '''\(.\{-}\)''' : '"\1"', \ '"\(.\{-}\
この記事は Vim Advent Calendar 2013 81日目の記事になります。 一瞬、空白が空いたような気がしますが気のせいです。 書きたい方がいれば今のうちですよ!! 今回は『vimfiler.vim にこんな機能があったなんて!!』というネタ。 さて、わたしは vimfiler.vim をファイラとして使用しているんですがファイル名を変更するときに『バッファ上で編集したいな…』と思っていました。 思っていたんですが… http://lingr.com/room/vim/archives/2014/02/19#message-18390521 と、いう事で既にそういう機能があったようです。 毎日使っているのに全然知らなかった。 以下の様な感じで キーでファイルを選択し、r キーで専用のバッファが開き、編集後に保存すればその内容が反映されます。 便利。
この記事は Vim Advent Calendar 2013 76日目の記事になります。 バレンタインデーネタとか全くないです。 さて、最近 migemo でインクリメンタルサーチしたいなーと思っていたんですが KaoriYa 版 Vim にそういう機能が組み込まれているそうなので簡単に試してみました。 ちなみに Vim において migemo がどういう扱いになっているのかはよくわかっていません。 (パッチがあるのかとか KaoriYa 版以外の Vim で利用できるのか etc... [インストール] 以下のページから migemo の dll や辞書ファイルなどをダウンロードします。 C/Migemo — KaoriYa ダウンロードが終わったら以下の手順に従い Vim に組み込みます。 インストール手順 以下の説明ではVimをインストールした(gvim.exeの置いてある)ディレク
この記事は Vim Advent Calendar 2013 74日目の記事になります。 元ネタ: http://lingr.com/room/vim/archives/2014/02/11#message-18320930 Lingr の Vim 部屋で上記のようなやりとりがあったのですが、簡単に実装してみました。 ちなみに NeoBundleLazy というのは neobundle.vim で実装されているプラグインを遅延読込する機能です。 簡単に説明すると以下の様な感じです。 " これが通常の使い方 " Vim の起動時にプラグインが読み込まれる " NeoBundle "Shougo/unite.vim" " NeoBundleLazy を使用する " Vim の起動時にはまだプラグインは読み込まれない NeoBundleLazy "Shougo/unite.vim" " 必要にな
次のページ
このページを最初にブックマークしてみませんか?
『C++でゲームプログラミング』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く