Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all 5751 articles
Browse latest View live

Fedora での vim の構築手順

$
0
0

Fedora 21 にて yum でインストール可能な vim (vim-enhanced) は (2015/04/12時点) 7.4.475と少し古いので、新し目の vim の構築手順を記します。

前提

  • version は v7.4.692を利用します。
  • gui=gtk2で構築します。
  • インストール先は /opt/vim/v7-4-692/とします。

依存パッケージのインストール

以下のコマンドでインストールします。 (X関連のパッケージが足りないかも)

$ sudo yum install gcc make autoconf ncurses-devel perl-devel perl-ExtUtils-Embed ruby-devel python-devel python3-devel lua-devel luajit-devel gtk2-devel libXt-devel

ソースコードの clone

git をインストールします。

$ sudo yum install git

ソースコードをクローンします。

$ git clone git://github.com/vim/vim.git

対象のバージョンに切り替える。

ハイフン区切りで区切られたタグがあるので、指定します。

$cd vim
$ git checkout v7-4-692

他にどのようなタグがあるか知りたい場合は、 git tagコマンドでバージョンに対応したタグが出力されるので、適宜指定してください。

vim のビルド

$cd src
$ make autoconf
$ ./configure \>   --prefix=/opt/vim/v7-4-692 \>   --with-features=huge \>   --enable-gui=gtk2 \>   --enable-multibyte \>   --enable-perlinterp=dynamic \>   --enable-pythoninterp=dynamic \>   --enable-rubyinterp=dynamic \>   --enable-luainterp=dynamic \>   --with-lua-prefix=/usr \>   --with-luajit \>   --enable-gpm \>   --enable-cscope \>   --enable-fontset \>   --enable-fail-if-missing
$ make

vim のインストール

$ sudo make -p /opt/vim/v7-4-692
$ sudo make install

最後に

上記手順で /opt/vim/v7-4-692/配下に vim がインストールされます。

最後に適宜 PATHに追加し利用ください。

参照


mutt+Gmailを使うための最低限の設定(muttでGmailのゴミ箱を使う方法)

$
0
0

以前muttを使っていたことがあったのですが、最近はGmailをよく使っています。ですがなんとなくmuttも設定したくなったので、参考サイトを見ながら手こずった点、注意点をまとめました。

あとこの記事の価値はhomebrewでのmuttの標準インストールではGmailのゴミ箱が使えないので、その設定なども。

muttを知らない人のために一応言っておくと、muttはCUIベースのMUAです。

Screen Shot 2015-04-13 at 11.45.06 PM.png

対象者

muttをバリバリ使いこなしたいという人向けではありません。ローカルには何も残さず、ただmuttをGmailクライアントとして使いたい人向けです。

たぶん、ローカルでキャッシュを持って表示速度を上げることなどもできるようなのですが、調べるつもりもありません。muttを触ったことがなくて、興味があるので使ってみたいという人にはとっかかりになるかもしれません。

あと趣味でエディターにはvimを設定し、vimライクなキーバインドにしてあります。

必要なもの

  • mutt(MUA。メーラー)
  • urlview(メール内のURLを一覧リンクにしてくれる)
  • w3c(htmlメールを見るためのブラウザ)
  • vim(エディター)

muttのインストール

もしもの時のためにデバッグモードのオプションとGmailのゴミ箱用のオプションをつけます。

$ brew install --with-trash-patch --with-debug mutt

参考:homebrewでインストールする際に利用できるオプションは次のコマンドで確認できます。(muttの利用可能オプションを探す場合)

$ brew options mutt

debugモードが有効化を確認するにはmutt -vを実行し、出力に+DEBUG(先頭が+であること)の文字列が含まれることを確認します。ゴミ箱利用のソースコードは現在パッチで提供されているようで、確認方法はないように思われます。

あとurlviewもw3cもインストールします。

$ brew install urlview w3c

muttの設定

muttの設定ファイルの本体である~/.muttrcはGitHubで管理したいので、パスワードなどの機密性が高い情報は~/mutt/muttrc.localの別ファイルで管理しています。

ユーザ(必要情報)

本設定で使う仮のメールアドレス、パスワードということにしています。

Gメールアドレス: yamadatarou@gmail.com
パスワード: hogehoge

~/.mutt/muttrc.local(パスワードなど)

~/.muttフォルダは自動で作成されません。手動で作成してください。
muttrc.localは秘密のファイルになりますのでファイルパーミッションをchmodで600にしてください。

~/.mutt/muttrc.local
set imap_user = "yamadatarou@gmail.com"
set imap_pass = "hogehoge"
set smtp_url = "smtp://yamadatarou@smtp.gmail.com:587/"
set smtp_pass = "hogehoge"
set from = "yamadatarou@gmail.com"
set realname = "Yamada Tarou"

~/.muttrc

source~/.mutt/muttrc.localを読み込んでいます。

smtp_authenticatorsの設定がないとGmailでメールが送れないので注意してください。

~/.muttrc
source ~/.mutt/muttrc.local
# smtp_authenticators is needed for sending via Gmail
set smtp_authenticators = 'gssapi:login'
set editor = "vim"

set spoolfile = imaps://imap.gmail.com/INBOX
set folder = imaps://imap.gmail.com/
set record="imaps://imap.gmail.com/[Gmail]/送信済みメール"
set postponed ="imaps://imap.gmail.com/[Gmail]/下書き"
set trash="imaps://imap.gmail.com/[Gmail]/ゴミ箱"
set signature = ~/.mutt/signature
# Disable "Move read messages to ~/mbox? ([no]/yes):"
set move = no

# brew install urlview
macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'

# brew install w3m
# need ~/.mailcap
auto_view text/html
alternative_order text/plain text/enriched text/html

# Vim-like bindings
bind pager / search
bind pager <up> previous-line
bind pager <down> next-line
bind pager k previous-line
bind pager j next-line
bind pager gg top
bind pager G bottom
bind index gg first-entry
bind index G last-entry

~/.mutt/signature

署名です。

~/.mutt/signature
Tarou Yamada
tarouyamada@gmail.com

~/.mailcap

HTMLメールを見るためw3mを使う設定です。

~/.mailcap
text/html; w3m -I %{charset} -T text/html; copiousoutput;

.muttrcの次の行も関係しています。

~/.muttrc抜粋
auto_view text/html
alternative_order text/plain text/enriched text/html

Gmail側の設定

muttを起動してGmailにアクセスできたでしょうか?

アクセスできない場合は、Gmail側で「安全性の低いアプリのアクセス」を拒絶している場合があります。下記のURLへアクセスするとログインを求められますので、ログインして「安全性の低いアプリのアクセス」の「オンにする」にチェックしてください。

https://www.google.com/settings/security/lesssecureapps

アクセスできましたか?

アクセス出来ない場合はデバッグ方法に記載したようにmuttをデバッグモードで起動し、デバッグファイルを確認して下さい。

muttでのGmailのゴミ箱の利用方法

~/.muttrcの次の行がGmailのゴミ箱利用の設定です。

~/.muttrc(抜粋)
set trash="imaps://imap.gmail.com/[Gmail]/ゴミ箱"

設定次第なのでしょうがmuttは標準では削除したファイルを回復できません。上記の設定を入れることで削除したファイルはGmailのゴミ箱に入るようになります。(この設定を機能させるにはmuttのインストールのインストールオプションが必要です。)

muttの起動

コマンドラインでmuttと打つとmuttが起動します。

muttを起動すると次のような画面になります。今回の設定ではjkで上下移動できるので、削除したいメールがある場合は、そのメールにカーソルを合わせてdのキーを押します。そうすると画面のようにDフラグが立ちます。実際の削除はqのキーを押してmuttを終了するときに画面のようにPurge 3 deleted message? ([yes]/no):と聞かれますので、yを押すと、mutt終了と同時に削除されGmailのゴミ箱に移動されます。

Screen Shot 2015-04-13 at 11.45.06 PM.png

muttからのGmailの見え方

muttを起動してcを押すとOpen mailbox ('?' for list):と聞かれます。?のキーを押すと次のような画面になります。

Screen Shot 2015-04-13 at 11.39.39 PM.png

さらに[Gmail]/にカーソルを合わせEnterを押すと、次のような画面になります。

muttで削除されたメールは下図のゴミ箱に移動されます。

Screen Shot 2015-04-13 at 11.39.59 PM.png

urlviewの使い方

今回の設定ではurlviewはCtrl+bで起動でき、次のような表示になります。カーソルを合わせてEnterを押すと、ブラウザが起動します。(今、試してみると起動しているFirefoxのタブが開きます。たぶん、設定次第でw3cで見たりすることもできたはずですが、設定しません。)

Screen Shot 2015-04-13 at 11.42.32 PM.png

デバッグ方法

本記事を読んで書いてある通りにしても繋がらない、メールが送れないなどのトラブルがあるかもしれません。そのような時のためにmuttは次のようにデバッグオプションをつけて起動することができます。デバッグレベルは1-5あり、マニュアルでは2が推奨されています。

$ mutt -d 2

起動するとホームディレクトリに~/.muttdebug0が作成されます。

ちなみに私がGmailにアクセス出来ない時にはこのようなエラーが出力されていました。

[2015-04-04 04:27:35] [WEBALERT https://accounts.google.com/ContinueSign............] Web login required.

URLが記載されていたのでアクセスすると、ブロッグされた情報などを管理する画面に入ることができ、Gmail側の設定のURLにたどり着くことができました。

困った時はデバッグモードで起動してデバッグファイルを確認しましょう。

参考サイト

UserStory/GMailOverIMAP
http://cedricduval.free.fr/mutt/patches/#trash
『mutt + Gmailを使ってCUIでのメール環境を作る』

【Go × Vim】 VimでGoを書く - 2015 Spring

$
0
0

快適にGoを書くための設定たち - 2015 Spring

インターネット上に転がってる情報は古いものも多いので,Goはじめるついでに2015年4月中旬ごろのトレンドっぽい?設定を探してみました.
なんかおかしな点や抜けてるところ等あればご教授いただけると幸いです.

\ Go! Go! /
   ʕ◔ϖ◔ʔ

Goのインストール

Homebrewから.

$ brew install go

環境変数GOPATH及びPATHを設定しておく(2015/04/14 18:15 追記: GOROOTについては記事の末尾に追記したので参照されたい).

export GOPATH=$HOME/go
export PATH=$PATH:/usr/local/opt/go/libexec/bin:$GOPATH/bin

Vimの設定

インデントの設定

Goはスペースでなくハードタブでのインデントが推奨されているので,その設定を追加する.

We use tabs for indentation and gofmt emits them by default. Use spaces only if you must. - formatting | Effective Go - The Go Programming Language

~/.vim/after/ftplugin/<filetype>.vimに書くことでFileTypeごとの設定を記述できる.

.vim/after/ftplugin/go.vim
setnoexpandtabsettabstop=4setshiftwidth=4

便利コマンド

注意: $GOROOT/misc/vimは消滅したらしい(参考: vim-jp » vim-go-extra を公開致します。

ここではgoogle/vim-ft-go(Vimに取り込まれてる)と$GOROOT/misc/vimの差分になるvim-jp/vim-go-extraを導入する.
(c.f. faith/vim-go: たぶんこっちのが高機能です.お好みでどうぞ.)

vim-ft-goには misc/vimの一部のみが含まれています。misc/vimからは以下のコマンドが削除されました。

  • :Godocコマンド
  • :Fmtコマンド
  • :Importコマンド

これらのコマンドは Fatih Arslan 氏が提供する vim-goにコマンド名称を変えて含まれておりますが、vim-goに含まれている syntax 等は vim のリポジトリに含まれている物と現在バッティングしています。 そこで vim-jp では上記の消えたコマンド群のみを集めた vim-go-extraというリポジトリを提供する事にしました。
- vim-jp » vim-go-extra を公開致します。

NeoBundle 'vim-jp/vim-go-extra'

以下はvim-jp/vim-go-extraの便利コマンド群.

:Godoc

パッケージとかのドキュメントを見れるgodocをVimから見れる.
vim-go-godoc-demo.gif

:Fmt

Goのフォーマット整形ツールgo fmtを実行する.
vim-go-fmt-demo.gif

:Import

パッケージのimportを挿入してくれる.
vim-go-import-demo.gif

補完

gocodeをいれる.これだけ.

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

vim-go-gocode-demo.gif

ググってみるとexe "set rtp+=".globpath($GOPATH, "src/github.com/nsf/gocode/vim")みたいなのを.vimrcに追記してる記事が多いが,実は不要っぽい?(gocodeのREADMEにも書いてない)

構文チェック

golintsyntasticを組み合わせる.

NeoBundle 'scrooloose/syntastic'letg:syntastic_mode_map = { 'mode': 'passive',
    \ 'active_filetypes': ['go'] }
letg:syntastic_go_checkers = ['go','golint']

保存時にgoでのコンパイルエラーのチェック及びgolintでのlintのエラーチェックが走る.

vim-go-lint-demo.gif

毎回入れるプラグインとか

それっぽいShellScriptをdotfilesに書く?(c.f. izumin5210/dotfiles).
もっといい方法あれば教えて下さい.

GOROOTについて(2015/04/14 18:15 追記)

@mattnさんからはてブでご指摘があった点になります.Twitter上で非常にわかりやすく丁寧に解説してくださいました.ありがとうございました!

GOROOT must be set only when installing to a custom location. - Installing to a custom location | Getting Started - The Go Programming Language

と,いうことで本記事の例だとGOROOTは設定不要です.

Ref

Vim plugins

Golang packages

vimで置換する際に改行を入れる

$
0
0

例えば、「 。」の後に改行を入れる

<ESC>:%s/。/。^M/g

^MCtrl+v Ctrl+mと入力する。

NeoBundle + Vesting 使ってVim plugin テストを自動化

$
0
0

はじめに

最近, Vim pluginを開発するようになって, テストをCIでぶん回したくなったので, 試行錯誤の結果メモ.

やりたいこと

僕はあんまりテストに深い思い入れがある訳ではないのだけど, 下記を実現したい気持ちがあった.

  1. コーディング中はVimから単体テストを実行したい.
  2. CIでもテストを回したいため, CLIからの実行も欲しい. READMEに"build passing"のバッジ貼りたい.
  3. テストを実行するための依存プラグイン管理の仕組みが欲しい.

Vim plguinのCIについて適当にググってみたところ, vim-flavorでテストをCLIから実行する, という方法が見つかったのだが, これは上記の1. と3. と背反するため, 今回は採用見送り.
また, vim-flavorは依存プラグインのバージョン指定がsemverに従ってないと上手く動作しない様子だったため, これも採用見送りの理由の一つ.

結局, 上記を全部充足するようなVimプラグインは特に見つからなかったので, NeoBundle + vesting + シェルスクリプトの構成を採用することにした.
NeoBundleは普段から使っているplugin manager, という理由.
vestingについては, 特に深い思いがある訳ではないが, NeoBundleと作者が一緒であり, 上記の1.に対応していたため.

やってみた

基本的な考え方

先述の通り, Vimを立ち上げてからの実行はvestingで出来るので, 作り込む必要があるのはCLI部分のみ.
今回は以下のアプローチでやってみた.

  1. レポジトリにneobundle.vimをclone.
  2. テスト用の.vimrcを用意し, テストに必要なVimの設定情報は事前に記述しておく.
    • プラグイン本体, NeoBundleのruntimepath設定はこのファイルに記述
    • テスト実行時に必要となる依存pluginはこのファイル中に:NeoBundleコマンドで列挙し, :NeoBundleInstallで取得する
  3. vestingを実行するためのマクロを用意する.
    • vestingはUniteで結果を出力するため, この結果をログに吐き出すようにしておく.
  4. Vimをsilent-modeで起動する. vim -u vest/.vimrc -s vest/_runner.
  5. vestの結果ログに[Fail], [Error]が存在するかどうか, grepする. 該当無しであればテスト成功とみなす.

コード解説

さて, 実際にQuramy/vesting-ciにサンプルのレポジトリ作って, TravisCIで動かしてみた.

レポジトリのディレクトリ構成は下記のようにしている.

ディレクトリ構成
- vesting-ci           # レポジトリのルート. 
 - autoload/
  |  calc.vim          # テスト対象コード
 + bundle/             # NeoBundleでinstallするpluginディレクトリ
 + neobundle.vim/      # NeoBundle本体
 - vest/               # vestingのテストコード用ディレクトリ
  |  .vimrc            # 2.の設定ファイル
  |  _runner           # 3.のvesting実行マクロ
  |  calc_add.vim      # vestingのテストコードその1
  |  calc_sub.vim      # vestingのテストコードその2
 + vim/
   runtest.sh          # CLI用シェルスクリプト
   .travis.yml         # TraviceCI設定ファイル

vestingはカレントディレクトリ配下のvest/*.vimをテストコードとみなして実行するため, テスト関係のファイルは極力ここに突っ込むようにした.

テスト対象のコードは下記. と言っても只の足し算と引き算.

autoload/calc.vim
function! calc#add(a,b)returna:a+a:bendfunctionfunction! calc#sub(a,b)returna:a-a:bendfunction

対応するvestingのテストコードは下記.

vest/calc_add.vim
scriptencoding utf-8

Context Vesting.run()
  It calc#add returns the summation of two values
    Should calc#add(1,2)==3
  End
End
Fin

vest/calc_sub.vimも似たような感じ. ちなみに, vestingは:Unite vesting:.をVimから実行すると, テストの一覧がUnite上に表示されるので, 実行したいテストファイルを選択してEnterを叩くとテストが実行される.

ここからがこのエントリの主眼. まずは上記2. の.vimrcから.

vest/.vimrc
if has('vim_starting')setnocompatiblelets:basedir = expand('<sfile>:p:h').'/../'  " プラグイン自体をruntimepathに登録.
  execute('set runtimepath+='.s:basedir)  " NeoBundleをruntimepathに登録.
  execute('set runtimepath+='.s:basedir.'neobundle.vim')  " NeoBundleで依存pluginを記載.  " Uniteとvestingは必須.call neobundle#begin(expand(s:basedir.'bundle'))
  NeoBundle 'Shougo/unite.vim'
  NeoBundle 'Shougo/vesting'call neobundle#end()  " 必要なpluginの一括installsilent NeoBundleInstall
endif

Uniteとvestingは最低限必要となるpluginである. もし, 他に必要なpluginがあれば, NeoBundleを追記していけばよい.
(僕が実際に開発しているPluginでは, vimprocを使ってるいるが, このファイルに追記している)

続いて3.のvesting実行マクロ.

vest/_runner
:Unite vesting:.
*
:call unite#action#do('start'):w vest/test_result.log
:quitallvim:ft=vim

vestingを実行した後, *で全テストファイルを選択. uniteのstart actionを実行すると, 全テストが実行されて結果がUniteのバッファに表示されるので, これをファイルに保存するようにしている.
あんまりスマートじゃない気もするが, 取り合えず動いてるのでこれでよし.
なお, このファイルの拡張子に.vimを付けてないのは, vestingがテストコードだと誤解しないようにするため.

最後にCLI用のシェルスクリプトとTravisCIの設定ファイル.
実際はディレクトリの存在チェックとか, Vim自体のビルド処理(TravisCIのVimが7.3で古いので)も書いているため, もう少し長くなるのだけど, 先述した方法の骨子を抜きだすとこんな感じだ.

runtest.sh
#/bin/shVIMRC_FILE="vest/.vimrc"DRIVER_FILE="vest/_runner"RESULT_FILE="vest/test_result.log"# 1. NeoBundleのクローン
git clone https://github.com/Shougo/neobundle.vim

# 4. Vestingの実行
vim -u ${VIMRC_FILE} -s ${DRIVER_FILE}
cat ${RESULT_FILE}# 5. テスト結果の判定
grep -E "\[Fail\]"${RESULT_FILE}> /dev/null
if[$? -eq 0];thenexit 1
fi
grep -E "\[Error\]"${RESULT_FILE}> /dev/null
if[$? -eq 0];thenexit 1
fi
.travis.yml
script:-sh runtest.sh

所感

最初はVim plguinのCI化は結構敷居が高そうに思っていたが, やってみると意外と簡単.

テスティングフレームワークに依存するのはマクロ部分だけなので, vesting以外のフレームワーク使ってる場合でも, 考え方とかシェルは使いまわせる予感.

参考

VimでVueifyをシンタックスハイライトしたかった

$
0
0

Vue.jsが流行っているらしいから入れた。

# npm install --save vue

Browserifyで使うならvueifyという便利なものがあると聞いて入れた。

vueifyでcomponent化
http://blog.koba04.com/post/2014/10/07/component-by-vueify/

vue1.png

Vimとかの場合は・・・

Vimとかの場合は・・・

Vimとかの場合は・・・!?

ワイ「そういやVueifyてHTML+jsだしJSXに似とるな?」

.vimrc
NeoBundle "pangloss/vim-javascript"
NeoBundle "mxw/vim-jsx"

NeoBundleでjsxハイライトを入れるやで~

.vim/bundle/vim-jsx/after/ftdetect/javascript.vim
autocmdBufNewFile,BufRead *.jsx,*.vue letb:jsx_ext_found =1autocmdBufNewFile,BufRead *.jsx,*.vue setfiletype=javascript.jsx
autocmdBufNewFile,BufRead *.js
  \ if<SID>EnableJSX()|setfiletype=javascript.jsx |endif

定義ファイル開いて.vueを追加するやで~

syntax.png

よし。

syntax2.png

つらみが残った。
そして思い至った。

HTMLでいいじゃん。

.vimrc
autocmdBufNewFile,BufRead *.{html,htm,vue*} setfiletype=html

syntax3.png

syntax4.png

HTMLには最初からHTMLもcssもjsも含まれているのであった。
敗北を知りたい。

PowerShell(cmd)をsolarizedに

$
0
0

PowerShell(またはコマンドプロンプト)でVimをやってるとcolorschemeを設定してもしっくりこないのでPowerShell自体の色設定をなんとかしてみることに。

cmd-colors-solarizedというのをハッケンしたのでこれをインストール。

git cloneまたは.regファイルをダウンロードして

regedit /s solarized-dark.reg
または
regedit /s solarized-light.reg

そうするとコマンドプロンプトの色設定が変更される。
(darkかlightは好きな方を選択)

PowerShellに反映させるにはもう一手間必要で、ここにある手順でショートカットを作成する。

PowerShellでVimを起動したらこんな感じに。(画像はdarkを使用)
ps.PNG

safariをvimの様に操作できる機能拡張[svim]の使い方

$
0
0

[環境設定]-[機能拡張]-[機能拡張を入手]から"svim"で検索して[Install Now]を押すとインストールできます。

公式のreadmeはこちら

https://github.com/flipxfx/sVim/blob/master/README.md

基本

  • escか"ctrl - ["でノーマルモード
  • iでインサートモード

ノーマルモードはvim的なキーバインドを受け付けるモード

インサートモードは普通にブラウジングできるモード

フォームにフォーカスがある状態では使えないので、escか"ctrl - ["でノーマルモードにして使います。

移動

h,j,k,l

各方向にスクロール

d,e

半画面上下にスクロール

D,E

1画面上下にスクロール

gg

トップへスクロール

G

最下部へスクロール

※ g9のような行番号指定はできません

gi

最初のinput boxへ移動

H

履歴を戻る

L

履歴を進む

タブ

K

次のタブに移動

J

前のタブに移動

t

新しいタブを開く

x

現在のタブを閉じる

gx0

左のタブを全て閉じる

gx$

右のタブを全て閉じる

X

最後に閉じたタブを開く

shift+,

現在のタブを左に移動

shift+.

現在のタブを右に移動

r

ページのリロード

リンク

f or F

リンクヒントを表示

スクリーンショット40.png

f(現在のタブ)もしくはF(新しいタブ)を押すとリンクヒントが表示される。

ヒントの文字を入力するとその場所にフォーカスが移るので、enterでリンクを開くことができます。

※ 初期状態では動きませんでしたが、[環境設定]-[機能拡張]からアップデートすると使えるようになりました。

sVimrc

gv

sVimrcを開く

sVimrcはsVimの設定ファイルです。
これを設定することでキーをリマップしたりスクロール幅を変えたりできます。

詳しくは以下を参照

https://github.com/flipxfx/sVim

ちなみにgistで公開されているsvimrcをインポートできます。

例えば私のgistはここです。

https://gist.github.com/mick-whats/49640d71bb6e75875ddb

この末尾の[49640d71bb6e75875ddb]がgist idになります。

gvして開いたページのsVimrc | gist id:という所にこのidを貼り付けてSyncを押すとインポートできます。

その他

zi

ズームイン

zo

ズームアウト

z0

元のズームに戻す


QuickRunでVimのメッセージの出力をキャプチャするコマンドを定義する

$
0
0

Vimには:messages:scriptnames:mapなど、現在のステータスメッセージを出力するコマンドがたくさんあります。

たとえば、現在のバッファ固有のキーマップを確認するためには、:map <buffer>などが便利ですし、&runtimepathを確認したり、環境変数を確認するため、:echoを利用するシーンは多々あるかと思います。

しかし、これらのコマンドは結果をメッセージ行に表示するため、通常のウィンドウのように操作をすることができず、表示行数が多い場合には、目的のものを探すのがつらいです。
また、コピペをする場合にも、マウスを使って選択した後で<C-y>したりする必要があったり、なにかと不便です。

ですので、これらメッセージの出力をVimのバッファに出力できると便利です。
それ専用にプラグインが作成されたりしていますが(*1,*2)、
ここでは、みんなだいすき QuickRun を利用して、実現します。

QuickRun vim-src 'messages'

これだけだと味気ないので、もう一工夫します。

command!-nargs=+-complete=command Capture QuickRun -type vim-src <q-args>

これで、Exコマンドのコマンドライン補完のサポートつきで、キャプチャするコマンドを定義しました。
:Captureの後、<TAB>を押す事で、コマンドを補完することができます。

" メッセージを確認する
Capture messsages
" スクリプトのロード履歴を確認する
Capture scriptnames
" 現在のバッファにマップされているキーマップを確認する
Capture map <buffer>" 環境変数`$PATH`を1エントリ1行にばらして確認する" 1. Windows
Capture echo tr($PATH,";","\n")" 2. bash
Capture echo tr($PATH,":","\n")

Vimでの作業をKibanaで可視化してみた

$
0
0

はじめに

皆さんが有用な情報をどんどん世界に発信している中、このような無駄以外の何物でもない記事を書いてしまったこと、深く反省しています。

しかし無駄は楽しい。
無駄とわかっていても、やってみたらどうなるだろうという興味に負けてしまいました。

可視化結果

まずは結果から。グラフ化されるとちょっと気持ちいい。

kobito.1429436406.305922.png

ダッシュボードは適当に作ったもので、どのレポジトリでいつどれだけ作業したのか、どのファイルを特に更新しているのか、また更新した行数などを出せるようにしています。

何となく自分で 俺少しは作業したわー感が味わえればそれで良かろうなのです。

これ以降は手法などの解説なので、興味のある方だけどうぞ。

可視化の方法

やったことはとても単純で、以下の通りです。

  1. autocmd を使って発生したイベント毎に情報を収集
  2. 収集したデータを Elasticsearch に記録
  3. Kibana で可視化

データの収集

準備

  1. Elasticsearch, Kibana のセットアップ
    • 他に記事がたくさんあるかと思うので省略
  2. Vim プラグインをインストール

vim-elastic

VimからElasticsearchにデータをPOSTするためだけに適当に作ったプラグインです。
デフォルトでは http://localhost:9200へPOSTするので、変更する場合には g:elastic#urlを設定してください。

let g:elastic#url = 'http://example.com'

vim-yacd

必須ではありません。
個人的に作っているプラグインですが、今回はレポジトリのルートディレクトリを取得するためだけに使っています。
他プラグインでも簡単に取れる情報だと思いますが、作ったから使ったというだけです。

vim-spy

今回の可視化の主役プラグインです。
autocmd を使って情報を取得し、vim-elastic 経由で Elasticsearch にデータをPOSTします。
POST先の Index, Type は以下の通りです。

IndexType説明
vimspyイベント関連のデータ
vimwork行数、ファイルサイズの差分データ

データの収集はデフォルトではもちろん無効で、:StartSpy, :StopSpyコマンドで開始/停止できます。
なお物好きな方は以下の設定で自動的に有効にできます。

let g:vim_spy_auto_start = 1

可視化

vim-spy によって事ある毎に Elasticsearch にデータはPOSTされるので、あとは Kibana 上で好きなように可視化するだけです。

ダッシュボードができたあとは Refresh Interval を短く設定しておくと、グラフが更新されていく様を見て楽しめると同時に、本来の作業への集中を欠くことができます。でも楽しい。

最後に

Docker で Elasticsearch を立ち上げてPOSTさせた限りでは vim-spy を有効にしていても、作業中に重さは特に感じませんでした。
ただ環境によっては重くなる可能性があるので、もし利用する際にはご注意ください。

もし Vim 上のこんなデータも可視化してみたら面白いんじゃないの?というのがありましたら、また無駄なことで楽しみたいので是非ご連絡ください。

`c_CTRL-A`で、指定したパターンにマッチするバッファを削除する

$
0
0

c_CTRL-Aは、cmdline 中で <C-a>を叩くという意味です。

これを利用することで、入力したパターンにマッチしたバッファを削除することができます。

通常、バッファを削除するための :bdelete等のコマンドは、bdelete 1 2 3 ...のように、バッファ番号を列挙するか、bdelete a.txt b.txtのようにバッファ名を個別に列挙しなければなりません。

ただ、実際に使っている時によくあるのは、特定の拡張子をバッファリストから削除したい、とか、特定のディレクトリ以下のバッファを削除したい、とか、そういうパターンです。
こういうとき、c_CTRL-Aを活用できます。

拡張子毎(たとえば '*.log`)にまとめてバッファを削除したい場合には、

bd log/*.log

ここまで入力して、<C-a>を押すと、ワイルドカードにマッチした内容に置き換えることができます。

bd log/2015-04-01_001.log log/2015-04-01_002.log ...

:bdelete自体はワイルドカードによる展開はしませんが、こうすることで、簡単に複数バッファを削除できます。

(もちろん、バッファ番号を憶えているような人には不要ですねー)

LINQPadをQuickRunから利用する

$
0
0

LINQPad、便利ですね。

特に、コード辺を入力し、すぐに評価して、結果を確認することができるところがよいです。いちいちVisualStudioで空ソリューションを作るの面倒です。

このLINQPadですが、コマンドラインインタフェースが用意されているので、これを、QuickRunから利用する場合の設定です。

letg:quickrun_config['cs/lprun'] =
      \ {
      \   'command': 'C:\Program Files (x86)\LINQPad4\LPRun.exe'
      \ ,'cmdopt': '-lang=S'
      \ ,'exec': '%c:gs?/?\\? %o %s'
      \ ,'tempfile': '%{tempname()}.cs'
      \ ,'hook/output_encode/encoding': '&termencoding'
      \ ,'hook/sweep/files': ['%S:p:r.exe']
      \ }

これで、:QuickRun cs/lprunするか、

letg:quickrun_config.cs= {'type` : 'cs/lprun'}

としておいて、filetype = cs なバッファで、:QuickRunです。

MacでVimでPlantUMLの編集環境を作る

$
0
0

スクリーンショット 2015-04-20 19.56.58.png

今でもクラス図やパッケージ図などはAstahなどを利用することが多いですが、シーケンス図に関して言えば圧倒的にPlantUMLが便利だと感じています。シーケンス図は、レイアウトに関しては機械的なレイアウトが有効的なことが多いので、こっちの方が便利ですね。

シンタクスハイライトだけならやることは簡単、vimにaklt/plantuml-syntaxを導入するだけです。

NeoBundleを利用しているのであれば、

" pluntumlのシンタクスハイライトと:makeコマンド
NeoBundle "aklt/plantuml-syntax"

を書いて:NeoBundleInstallでとりあえず、 *.pu か *.uml か *.plantuml でシンタクスハイライトが効くようになります。

あとは:makeで画像の出力と表示をするようにしましょう。
まず、$HOME/local/lib/plantuml.jarを置いておき、

#!/bin/bash
java -jar $HOME/local/lib/plantuml.jar -tpng $@
open ${@%%.*}.png

上記のシェルスクリプトを$HOME/dotfile/plantumlというファイル名でに実行権限を付けおいておきましょう。そして、.vimrc

" plantumlスクリプトの設定letg:plantuml_executable_script="~/dotfiles/plantuml"

以上を記述しておけば:makeを実行することで、画像を出力し、.pngファイルの拡張子が関連付けられたビュアーで自動的にその画像を開いてくれるようになります。

スクリーンショット 2015-04-20 20.05.28.png

以上のような感じでビュアーで開かれます。とても便利です。

なお、他の開発環境に関しては、こちらにもまとまっていますが、ちょっとしたものを書くときにはvimが大変便利です。

追伸

以上の例のために書いたシーケンス図を張っておきます。あと、この設定がされたdotfilesはこちらに上がっています。

@startuml
title 家計簿アプリの家計簿取得シーケンス

participant "ユーザー"

box "家計簿システム" #LightBlue
    participant "Play"
    participant "Redis"
    participant "MySQL"
end box

"ユーザー" -> "Play" : 家計簿を取得
"Play" -> "Redis" : ユーザーID、今月という時間をキーに取得
    alt キャッシュヒット
        "Play" <-- "Redis" : 家計簿情報または家計簿がないという情報
    else キャッシュミス
        "Play" <-- "Redis" : キャッシュされていないという情報
        "Play" -> "MySQL" : 家計簿取得
        "Play" <-- "MySQL"
        alt 家計簿情報あり
            "Play" ->> "Redis" : 非同期に\n家計簿情報を格納
        else 家計簿情報なし
            "Play" ->> "Redis" : 非同期に\n家計簿がないという情報を格納
        end
    end
"ユーザー" <-- "Play" : 家計簿情報または家計簿がないという情報
@enduml

babel + Node.js をvim-quickrunで実行する

$
0
0

最近, ちょいちょいbabelを触ることが増えてきた.

babelはEcma 6th, 7thで書かれたコードをコンパイルして, ブラウザやNode.jsが実行できる形式のJavaScriptコードに変換してくれるツール(transpiler)だ.

一方, 僕はJavaScript開発時, ちょっとしたJavaScriptのスニペットはvim-quickrunを使ってVimから実行している.

しかし, babelでtranspileしないと動作しない.jsのコードを:QuickRunとしても, 当然Node.jsに怒られてしまう.
そこで, babeってからNode.jsで実行するようにQuickRunの設定を書いてみた.

.vimrc
letg:quickrun_config['babel'] = {
      \ 'cmdopt': '--stage 1',
      \ 'exec': "babel %o %s | node"
      \ }

こうしておけば, :QuickRun babelとすることで, babelでコンパイル→Node.jsで実行ができる.
(勿論, 事前にnpm -g install babelでbabelをinstallしておくこと)

この段階で殆ど当初の目的は達成できているけど, 実行の度に:QuickRun babelのようにcommandを叩くのがちょいと欝陶しい.
fileTypeデフォルトの設定であれば, <Leader>rにQuickRunの実行が割り当てられているが, .jsだからと言って必ずしもbabeる訳でもないので, babel設定をファイルタイプデフォルトにするのも気が引ける.

そこで, b:quickrun_configを使うことにした.
b:quickrun_configはバッファローカルな設定なので, そのバッファでのみデフォルト挙動を変更することができる.

というわけで, g:quickrun_configの値をb:quickrun_configに設定するためのコマンドQuickRunSwitchを用意した.

  1. .jsファイルを開く
  2. :QuickRunSwitch babelでバッファ内におけるデフォルトの typeを変更(一応補完も効くようになってる)
  3. <Leader>rでサックリ実行

.vimrcは下記のようになる.

.vimrc
letg:quickrun_config = {}
function!s:quickrun_switch(...)ifa:{0} && has_key(g:quickrun_config,a:{1})let type_name =a:{1}
    echo 'Quickrn switch type: '.type_name
    letb:quickrun_config =g:quickrun_config[type_name]
  endifendfunctionfunction!s:quickrun_switch_complete(ArgLead, CmdLine, CursorPos)let key_list = keys(g:quickrun_config)let matched = []
  for key_str in key_list
    if stridx(key_str,a:ArgLead)==0call add(matched, key_str)endifendforreturn matched
endfunction
command!-nargs=? -complete=customlist,s:quickrun_switch_complete QuickRunSwitch : calls:quickrun_switch(<f-args>)" babelの設定letg:quickrun_config['babel'] = {
      \ 'cmdopt': '--stage 1',
      \ 'exec': "babel %o %s | node"
      \ }

こいつは便利だぜー、とか思ってたら, 似たようなことを考える人はいたようで, unite-quickrun-configというのが公開されてました. 最初からこっち使っときゃよかったかなー。

ま、command or uniteのsourceで多少違い出てるので良しとするか。

Intellij IDEA 14 に ideavim 入れて使うときのクリップボード共有設定

$
0
0

~/.ideavimrcで、お馴染みの下記設定を書けば良いようです。

set clipboard=unnamed

効かない場合はプラグインをアップデートすると効くかと思います。
対応されたのはプラグインのバージョン 0.38 のようです。
ちなみに古いバージョンだと ideavim は ~/.vimrc を見てたみたいです。変わってくれてよかったです。

参考


vim-quickrun-qo 書いた

$
0
0

vim-quickrunとは

Vim界隈ではとても有名なプラグイン。
:QuickrunするだけであらゆるソースをVim内で実行できる神プラグイン。
各部がモジュール化されていて、とても柔軟にカスタマイズができる。

qoとは

C / C++ / Objective-Cのソースファイルに特殊なコメントを追加して、
実行ファイルのビルドを補助するツール。

よく知らないけど、Goコミュニティ発祥らしい。

こんな感じで書ける:

curl.c
// #qo LIBS: curl#include <stdio.h>#include <curl/curl.h>intmain(intargc,charconst*argv[]){CURL*curl=curl_easy_init();// CURL を使ったプログラムが続く ...return0;}

普通ならこんな感じでコンパイルする:

> gcc curl.c -lcurl
> ./a.out

しかし、qoならこうなる:

> qo
[  0%] Beginning build
[ 50%] Compiled curl.c
[100%] Linked curl
> ./curl

vim-quickrun-qoとは

vim-quickrunのhookを利用して、qoでのビルド、実行に対応させたツール。

ソースファイルの最初の10行以内に#qoディレクティブを見つけると、
:Quickrunをフックしてqoでビルドし、その場で実行する。
qoをインストールしておけば、多少複雑なビルドが必要でもVim内で作業を完結できる。

インストール方法

Neobundle.vimなりPathegonなり、好きなプラグインマネージャを使ってインストールする。

manicmaniac/vim-quickrun-qo

使用方法

何もない。インストールして#qoディレクティブを使ったC系のソースを書いて、:QuickRunするだけ。

Spacemacsの導入方法

$
0
0

普段Emacs使いですが、この前またGithubのtrendで上位に挙がっていたのでちょっとSpacemacsを試してみています。

最初設定方法(いつもinit.elに書いているようなこと)がわかり辛かったのでまとめてみました。

インストール

本家のREADNE.mdに従ってインストールします。
Emacs 24.3または24.4でテストされているらしいので、いずれかのバージョンのEmacsを事前にインストールしておきます。

1 まず既存の.emacs.dがある場合これをバックアップ:

cd ~
mv .emacs.d .emacs.bak

2 Spacemacsを.emacs.dとしてクローン:

git clone --recursive http://github.com/syl20bnr/spacemacs ~/.emacs.d

3 Emacsを起動すると、必要なパッケージのインストールが始まります。

4 パッケージのインストールが終わったら再起動します。

設定方法

Spacemacsでは各種設定はConfiguration layerという単位に分割されて管理されます。Spacemacsは~/.spacemacsファイルに従ってこのConfiguration layerをロードします。

クローンした後の.emacs.dの下のspacemacs/contribディレクトリには、便利なConfiguration layerがいろいろ入っています。例えばspacemacs/contrib/auto-completionを使いたい場合、その旨を~/.spacemacsに記述することでauto-completionを利用することができるようになります。

.spacemacs

M-x dotspacemacs/installコマンドを実行すると、デフォルトの設定が記述された.spacemacsがホームディレクトリに作成されます。

M-m f e dで作成された~/.spacemacsファイルが開きます。例えば以下のようにdotspacemacs-configuration-layersに記述して、

;; List of configuration layers to load.dotspacemacs-configuration-layers'(auto-completion)

M-x dotspacemacs/sync-configuration-layersを実行すると、~/.spacemacsの変更が適用され、Emacs package repositoriesからのauto-completionのダウンロードや設定が施されます。

spacemacs/contrib以下にはたくさんのConfiguration layerがあります。
各種言語系の設定spacemacs/contrib/langのようにサブディレクトリに格納されている場合、サブディレクトリの方の名前をdotspacemacs-configuration-layersに記述します。

dotspacemacs-configuration-layers'(javascript);; javascriptのConfiguration layerを使う

個人的なConfiguration layer

個人的な設定をしたい場合もConfiguration layerを使います。

M-x configuration-layer/create-layerを実行するとprivateディレクトリ配下に任意の名前のConfigulation layerが作成されます。例えばこんな感じになるかと思います:

ls -1 private/
hogehoge-project # hogehogeプロジェクト用のConfigulation layer
pbaleine         # プロジェクトに紐づかない個人的な設定用のConfigulation layer
snippets         # snippet用のディレクトリ

Configuration layerの構成はこんな感じになります:

ls -1 private/pbaleine/
config.el      # 設定をかくところ
extensions.el  # package.elでダウンロードできないパッケージの設定
funcs.el       # 関数とかをかくところ
keybindings.el # キーバインドをかくところ
packages.el    # package.elでダウンロードできるパッケージの設定

Spacemacs起動時にはfuncs.el -> config.el -> packages.el -> extensions.el -> keybindings.elの順にロードされる(みたい1)ので、funcs.elに関数を定義してconfig.elに設定を書いてkeybindings.elにキーバインドを記述しておけば、設定が完了した状態でSpacemacsが起動します。

おまけ

  • デフォルトの~/.spacemacsではsource code proを利用するように設定されてるので、これを使う場合あらかじめsource code proをインストールしておくときれいに表示されます。

  • Emacs使いはspaceM-mで読み替えてドキュメント読みましょう

  • …Vimユーザ向けにつくったってかいてあるけど、Vimユーザは使わないと思うよ


  1. 公式のドキュメント上で記述が見つけられていないので*Messages*バッファの出力をみて判断しています…まぁこの順序が変わることはないと思いますが 

vim 折り返された行への移動

$
0
0

vimで以下のように自動で折り返された時の上下の移動メモ

memo.jpg

1.カーソル行から上へ。
gk

2.カーソル行から下へ。
gj

git管理している別ブランチの特定ファイルをvimで画面分割して開く

$
0
0
  • fugitiveとはvimからGitを操作できるようにするもの

インストールはNoeBundleを使っているなら以下をvimrcに追加

" Gitを使うプラグイン
NeoBundle 'tpope/vim-fugitive'

タイトルにある
「他ブランチの特定ファイルを画面分割して開く」はこちら

:Gvsplit BRUNCH_NAME:PATH_TO_FILE

その他のコマンドは調べるかhelpを見る

:h fugitive

Vim で 「E518: 未知のオプションです」と出た時の対処法

$
0
0

Vim で

x = {vi: true}

みたいなファイルを開くと
Vim(buffer):E518: 未知のオプションです: true
とか
modelines の処理中にエラーが検出されました:
みたいなエラーが出たりする

どうやら、modeline君(ファイルごとにオプション設定するやつ)が自分が呼ばれてると思ってるので切る

.vimrc
setnomodeline

見るのはコメントの中だけにして欲しいと思った(小学生並みの感想)

Viewing all 5751 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>