生涯未熟

生涯未熟

プログラミングをちょこちょこと。

vim-goの入力補完が動かなくなった

.vimrcの整理整頓作業をしていたところ、突然vim-goの入力補完が下記のようになった。

f:id:syossan:20170216133259p:plain

「いやいや、こっちがPanicだよ」と思いつつ、色々と対策を探しました。

対策

そもそも、vim-goの補完にはgocodeが使われており、そちらのISSUEを探したところありました。

github.com

「gocodeを再起動させてみ?」って感じのレスがあったので、一度gocodeのアップデートをかましてから再起動しました。

$ gocode close
$ go get -u github.com/nsf/gocode

するとキチンと補完してくれるようになりました。

とりあえず困ったら再起動ですね!

kirimoriにVimのExコマンドを実行する機能を追加しました

細々とkirimoriの開発をしております。

今回はkirimori addkirimori removeをした際に各プラグインマネージャー毎に対応したExコマンドを叩く機能を追加しました。

例えば、Vundleの場合はkirimori addした際に:PluginInstallが、kirimori removeした際に:PluginCleanが自動で実行されます。

実行してみると以下のような動きになります。

f:id:syossan:20170206231645g:plain

これで結構便利なツールになったのでは、と思います。

まだまだ機能改善の余地がありますので、「これ欲しいな」や「動かない」など何でもご意見お待ちしております。

github.com

ranger-cdをzshで使えるようにした

rangerを教えてもらったんですが「めちゃ便利だ!」と今更ながら気付いた私です。

さて、rangerにはexamplesというディレクトリの中に様々な便利関数が置かれています。

その中でもranger-cdは、rangerで最後にqで抜けたところに移動してくれるという便利関数なのですが、zshだとそのままコードをコピっても動きません。

ranger/bash_automatic_cd.sh at master · ranger/ranger · GitHub

なので、zshで動くように変更を加えたものを作ったので置いておきます。

github.com

ここにある、ranger-cd.shの中身をコピって.zshrcに貼り付ければ動くはずです。

Dockerでとんでもないハマり方をした

ちょっとDockerを触ってみてるsyossan27です。

雰囲気でkirimoriが動くDockerImageを作成する時にとんでもないハマり方しました。

一体何が

ホームディレクトリでDockerfile作って、kirimoriのバイナリファイル置いてCOPYでDockerImageにコピーしようとDockerfile書いて、いざ実行とbuild叩きました。

$ pwd
/Users/syossan27
$ docker build -t kirimori .

するとですね、何かメッセージが表示されたんですが表示されるGB数が10GBを越えてたんですよね。

全く止まる気配が無かったので一旦止めて対策を探し求めました。

するとこんなのが。

https://groups.google.com/forum/#!topic/docker-user/UJT6aO4hTrU

結局、適当なディレクトリを作ってそこにDockerfileとバイナリファイルを置いて、先ほどと同じコマンドを実行することでなんとかDockerImage作成出来ました。

いやー、びっくりした・・・

golangのパッケージマネージャdepのIssue覗いてみた

今まではglideを使ってたのですが、公式ご謹製ということでdepをこれから使っていこうかなと思いまして、一旦Issueを覗いてみました。

その中でも気になったIssueはこちら。

github.com

dep initして生成されたmanifest.jsonが空だよ」ってIssueなんですが、pksunkaraさんが「僕のリポジトリdep init試してみたけど空だったよ」とコメントを寄せていたのでやってみました。

そのリポジトリはこれ↓

github.com

で、試してみたんですが確かにmanifest.jsonが空・・・

何でだろうとちょっとdepの中身追っかけてみました。

まずはdep initを実行するとinit.gofunc Runが動きます。 func Runの中でmanifest.jsonに書き込む文字列を用意している部分が以下です。

for pr, v := range pd.ondisk {
    // That we have to chop off these path prefixes is a symptom of
    // a problem in gps itself
    pkgs := make([]string, 0, len(pd.dependencies[pr]))
    prslash := string(pr) + "/"
    for _, pkg := range pd.dependencies[pr] {
        if pkg == string(pr) {
            pkgs = append(pkgs, ".")
        } else {
            pkgs = append(pkgs, strings.TrimPrefix(pkg, prslash))
        }
    }

    l.P = append(l.P, gps.NewLockedProject(
        gps.ProjectIdentifier{ProjectRoot: pr}, v, pkgs),
    )
}

pd.ondisk$GOPATH/srcに存在しているパッケージの一覧なのですが、このpd.ondiskが空になっているがためにmanifest.jsonが空になっていました。

つまり、プログラム上で使っているパッケージが$GOPATH/srcに無いと、manifest.jsonは空になるということです。

ふぅむ・・・ここまで調べて「んじゃmanifest.jsonって一体何なんだろうか」って疑問が浮かびました。

ちょっとこの辺りはまた後日調べてみようと思います🙇