Vimで編集中のRubyスクリプトを実行する

Vimで編集中のテキストの中にRubyスクリプトを書いて実行する

こんな感じでスクリプトを書いて

10.times{|i|
  print "array[#{i}] = ;\n"
}

↑の文字列をVisualモードで選択し、eval.rbを呼び出すと

:'<,'>!ruby c:\tools\vim74-kaoriya-win64\eval.rb

選択した文字列がRubyスクリプトとして実行されて結果が埋め込
まれる。

array[0] = ;
array[1] = ;
array[2] = ;
array[3] = ;
array[4] = ;
array[5] = ;
array[6] = ;
array[7] = ;
array[8] = ;
array[9] = ;

eval.rbの内容

#!/usr/bin/ruby -Ks

body = $stdin.read
eval body

標準入力をevalするだけなので、
ちょいっとRubyスクリプトを書いていつでも実行できる。
あら便利。

Vimで一発Grep

Vimは超強力なエディタだけどgrepするのが辛いと思ってた。

:vimgrep hogehoge *.[ch]

やっぱり辛い。

$VIM/vimrc

" grでカーソル下のキーワードをvimgrep

nnoremap <expr> gr ':vimgrep ;\<' . expand('<cword>') . '\>; **/*.[ch] \| cw <CR>'
nnoremap <f2> :cprevious<CR>
nnoremap <f3> :cnext<CR>

今のところ対象は.cと.hだけ。
これでいつでもgrでgrepできる。

grepしたら F3で次を検索、F2で前を検索

上位のフォルダで検索かけちゃったとき延々とgrepし続けちゃうのは嫌だなぁ..

VimからRubyを呼び出して電卓代わりにする

Vim上で計算をしたいけど
電卓を立ち上げるのが面倒くさい。

4+2=

というテキストがあったら、数式とみなして

4+2=6

となってほしい。

Rubyスクリプトを書いてみました。

#!/usr/bin/ruby -Ks

body = $stdin.read
body.each_line{|line|
  line.chomp!
  line.gsub!(/=(.*)/,"")
  if line.length > 0
    print "#{line}="
    ans = eval line
	if line.match(/0x/)
      printf "0x%x",ans
	elsif line.match(/0b/)
      printf "0b%b",ans
	else
	  print "#{ans}"
	end
  end
  print "\n"
}

VimのVisualモードで

4+2=
4-2=
4*2=
4%2=
0x48+0x72=

を選択して

:'<,'>!ruby c:\tools\vim74-kaoriya-win64\calc.rb 

をすると

4+2=6
4-2=2
4*2=8
4%2=0
0x48+0x72=0xba

となり、電卓要らず。
Vim単体でも: C-r = 4 + 2 で計算できるけど
これだと複数の計算も一気にできて便利。

しくみ。

Visualモードで選択した行が、calc.rbの
標準入力に入るのでevalして結果を標準出力するだけ。
シンプルな仕組みなので、ほかにもいろいろできそう。

秀丸からgvimに乗り換えたときの個人的なメモ

本体とmigemoとctagsとneocomplcacheまで。

ダウンロード

本体
http://www.kaoriya.net/software/
Windows 32bit版 ダウンロード

ctags
http://hp.vector.co.jp/authors/VA025040/

C/Migemo for windows 32bit
http://www.kaoriya.net/software/cmigemo/

プラグイン neocomplcache
https://github.com/Shougo/neocomplcache.vim
neocomplcache.vim-master.zip

インストール

vim74-kaoriya-win64-20160305.zip
ec58j2w32bin.zip
cmigemo-default-win64-20110227.zip

展開してどこかに置く

vim74-kaoriya-win64-20160305.zip
→ C:\tools\vim74-kaoriya-win64

ec58j2w32bin.zip
→ C:\tools\vim74-kaoriya-win64

cmigemo-default-win64-20110227.zip
→ C:\tools\vim74-kaoriya-win64
C:\tools\vim74-kaoriya-win64_\dict\cp932\ の内容を
C:\tools\vim74-kaoriya-win64_\dict\ にコピー

neocomplcache.vim-master.zip
→ $VIM/runtime/

gvimrc
$VIM/gvimrcに追記

set number
set nowrap
syntax off

set tabstop=4
set shiftwidth=4
set noexpandtab

set listchars=eol:$,tab:>\

set migemo
set migemodict=C:\tools\vim74-kaoriya-win64\dict\migemo-dict
set clipboard+=unnamed

set showtabline=2

nnoremap / g/

vimrc
$VIM/vimrcに追記

set runtimepath+=$VIM/runtime
set runtimepath+=$VIM/runtime/plugin/

" neocomplcache
let g:neocomplcache_enable_at_startup = 1

"挿入モード終了時にIME状態を保存しない
inoremap
inoremap

"IMEモード固定
inoremap

autocmd QuickfixCmdPost * copen
set backupdir=$VIM/backup

set autochdir
set wrapscan

"nnoremap :!ctags -R
nnoremap :!start ctags -R

" grでカーソル下のキーワードをvimgrep
nnoremap gr ':vimgrep ;\<' . expand('') . '\>; **/*.[ch] \| cw '

nnoremap :cprevious
nnoremap :cnext

" Vim終了時に現在のセッションを保存する
au VimLeave * mks! c:\temp\Session.vim

source c:\temp\Session.vim

ハマったところ

Migemoが動かない。
辞書のパス指定が間違っていた!migemo-dictがファイル名だと思っていなかった。

neocomplcachが動かない。
gvimrcに設定をしていた。vimrcに設定する必要があった。