std::getline を利用して任意の文字で文字列を分割する

知らなかったので覚書。

[コード]

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

int
main(){
    std::string input = "homu,mami,mado";
    std::istringstream iss(input);

    std::string str;
    std::vector<std::string> result;
    // , ごとに std::getline で文字列を読みこんでくる
    while( std::getline(iss, str, ',') ){
        result.push_back(str);
    }

    for(auto&& str : result){
        std::cout << str << std::endl;
    }
    
    return 0;
}

[出力]

homu
mami
mado

とりあえず使いたい場合は便利そう。

Vim で .vimrc を読み込まずにプラグインを使う

某所で話題になったので覚書。
vim--cmd オプションで runtimepathプラグインのパスを設定します。

$ vim -u NORC -N --cmd "set runtimepath+=~/.vim/bundle/ctrlp.vim"

ポイントは -uNORC を渡すとこ。
最初は NONE を渡してたんですが、NONE を渡すとプラグインが読み込まれなくなるので注意する必要があります。

Ruby の #tap の面白い挙動

Ruby#tap はレシーバをブロック引数に渡して、レシーバ自身を返すメソッドです。

x = 42
p x.tap{ |n| p n + n }
# output:
# 84
# 42

ブロック内でレシーバ自身を書き換えても書き換える前の値が返ってくる

この #tap の面白い挙動なんですが、ブロック内でレシーバ自身を書き換えても書き換える前の値が返ってきます。

x = 42
p x.tap{
    x = 3.14
}
# => 42
p x
# => 3.14

これはしらなかったなー。

Vim 8.0 が 8月中にリリース予定

今朝、vim_dev の ML に告知がありました。

Vim 8 pre-announcement - vim_dev

Work on Vim 8.0 is coming close to an end. I hope version 8.0 can be released in about two weeks.

約2週間後にリリース予定らしいので予定通り進めば今月中にも Vim 8.0 がリリースされます。
Vim 7.4 のパッチ数も 2000 を超えて、『Vim 8.0 はまだか…』と思っていましたがついに来ましたね。
Vim 7.0 のリリースが 2006年5月なので、メジャーアップデートは実に10年ぶりとなります。
リリースに関する詳細は version8.txt を参照してください。

Vim でバッファ外のチルダ("~") の表示を無効にする

Vim 7.4.2213 で追加された EndOfBuffer ハイライトグループを利用してバッファ外に表示されるチルダ("~")を無効にすることが出来ます。

[表示あり]

[表示なし]

highlight link EndOfBuffer Ignore

Vim 7.4.2213 でバッファ外の "~" の部分のハイライトを制御する追加された

Vim 7.4.2213 で EndOfBuffer というハイライトグループが追加されました。

github.com

これはバッファ外の "~" の部分のハイライトをハイライトするのに使用されます。

ここの部分

[設定例]

EndOfBuffer は通常のハイライトグループと同じように使用できます。

highlight link EndOfBuffer Error

[注意点]

EndOfBuffer"~" だけではなくてそのライン行全てに反映されるので注意してください。