Vimscript for bash
bashで変数を${}で囲うのが面倒になってきたので、愛用しているVimのscriptを書いてみた。 NeoBundleで入れられます。
$hogeでいいのか、${hoge}なのか、"$hoge"にしないといけないのか、を考えるよりも、統一して"${hoge}“にしておけば良いのだけど、入力するのが面倒だっただけに、たまにトラブルを招く結果になっていたがこれで安心。ただ、scriptの内容があまりきれいではない。もう少しすっきり書ける気はする。
Vimscript 簡易メモ
- 関数はfunctionで定義する。同名の関数があっても打ち消したい場合はfunction!で定義する。仮引数には
a:
を付けてアクセスする。 - getline(‘.’)はカーソル行の文字列を取得する。col(‘.’)でカーソル列の列数を取得できるので、getline(‘.’)[col(‘.’)-1]でカーソル位置の文字を取得できる。
- normalでノーマルモードでのコマンドを実行する。normal!とすると、そのコマンドが別のコマンドにマップされていてもそれを展開しないので、デフォルトのコマンドを確実に実行できる。
- exe(execute)でevalっぽく文字列をコマンドとして実行できる。文字列を
.
で結合してexeに渡せば、所望のコマンドを構築して実行できる。 call cursor(row,col)
でカーソル位置を移動する。
Vim command
- 日常的に使う重要なコマンド類について
- マクロ :
qa ... q
で...
を記憶し、@q
で実行。10@q
で10回実行。 - 数字増減 :
C-a
でインクリメント、C-x
でデクリメント。 - 置換 :
:%s/aaa/bbb/g
でファイル内の全置換。v
で範囲選択して:'<,'>s/aaa/bbb/g
で、選択範囲のみ置換。 - カラム単位の編集 :
C-v
で範囲選択してShift-i
でカラム(縦)の同時編集による追記。x
による同時削除も可。 - やり直し(redo/unredo) :
u
でやり直し、C-r
でやり直しのやり直し。 - 対応する括弧へジャンプ :
%
。 - 行結合 :
Shift-J
でスペースを一つ挟んで次行を現行の末尾に結合。 - 画面分割 :
:new
、:vnew
で新規画面、:sp
、:vsp
で画面複製(v
は縦)。C-w+[hjkl]
で画面移動。C-w+10[+>]
でその画面を10[行列]広げる(>
は縦時)。 - 行番号表示 : .vimrcで
set number
。あるいは:set nu
(:set num
は不可)。行番号非表示は:set nonu
。 - ファイルオープン :
:e.
でカレントディレクトリのファイルを列挙し、s
でtimeとsizeでのソートが可能。なお、:lcd %:h
でそのウィンドウにおけるカレントディレクトリをそのファイルの位置に変更。 - 複数ファイルオープン :
-p
オプションをつけて複数ファイルを指定してvimを実行。g[tT]
で前後のタブに移動。 - クリップボードのペースト : 各行がインデントされ続けてしまうため、
:set paste
を実行してからペースト。 - クリップボードへコピー :
v
で選択して"*y
- 行末への追加 :
A
.vimrc
- 自分用.vimrc(一部省略)。mapを作っても使わないと忘れてしまうので、相当回数繰り返したものはmapに登録する。
" For multibyte characters scriptencoding utf-8 " NetBundle set runtimepath+=~/.vim/bundle/neobundle.vim/ call neobundle#begin(expand('~/.vim/bundle/')) NeoBundleFetch 'Shougo/neobundle.vim' NeoBundle 'nanotech/jellybeans.vim' NeoBundle 'scrooloose/syntastic' NeoBundle 'Shougo/unite.vim' NeoBundle 'Shougo/vimproc' NeoBundle 'cocopon/iceberg.vim' call neobundle#end() filetype plugin indent on NeoBundleCheck set number syntax enable set hlsearch "colorscheme jellybeans colorscheme iceberg set background=dark set tabstop=4 set cindent set smartindent set autoindent set shiftwidth=4 set cinoptions=1s nmap <CR> :noh<CR> imap <C-H> <ESC> noremap 9 $ " Paste to clipboard let mapleader = "\<Space>" vmap <Leader>y "+y " Simpler " set clipboard+=unnamed nnoremap <Leader>cc :lcd %:h<CR> set cursorline hi CursorLine cterm=NONE ctermfg=NONE ctermbg=0 set cursorcolumn hi CursorColumn cterm=NONE ctermfg=NONE ctermbg=0 set scrolloff=2 autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif set display=lastline " ctags nnoremap <C-]> g<C-]> " ag : faster grep " brew install the_silver_searcher " apt-get install silversearcher-ag nnoremap <silent> <Leader>ag :<C-u>Unite grep:. -buffer-name=search-buffer<CR><C-R><C-W> noremap <expr> <C-f> max([winheight(0) - 2, 1]) . "\<C-d>" . (line('.') > line('$') - winheight(0) ? 'L' : 'H') noremap <expr> <C-b> max([winheight(0) - 2, 1]) . "\<C-u>" . (line('.') < 1 + winheight(0) ? 'H' : 'L') autocmd BufWritePost .vimrc source % " yank also copy to clipboard set clipboard+=unnamed