vimとは
http://postd.cc/vim-galore-1/#what-is-vim
vimの基礎
リストいろいろ
:history
:registers
:marks
:ls (:buffers)
:args
:jumps
:changes
:tags
変数の値を参照
let の場合はecho $ set の場合は path? キーバインドの場合は :help C-o
マップ
コマンド | ノーマルモード | 挿入モード | コマンドラインモード | ビジュアルモード |
---|---|---|---|---|
map/noremap | ○ | - | - | ○ |
nmap/nnoremap | ○ | - | - | - |
imap/inoremap | - | ○ | - | - |
cmap/cnoremap | - | - | ○ | - |
vmap/vnoremap | - | - | - | ○ |
map!/noremap! | - | ○ | ○ | - |
http://vim-jp.org/vimdoc-ja/map.html
キーマッピングのオプション
<silent>
:コマンドラインへの出力を抑制します。キーマッピングからコマンドを実行する場合などに指定します。<unique>
:すでにマッピングが存在する場合、エラーにします。通常は上書きされます。<buffer>
:バッファローカルなキーマッピングを定義します。<buffer>
を付けるとVim起動時に最初に表示されるバッファのみでしか定義されず他のバッファで使えなくなる。<expr>
:マップ先の文字列を Vim の式とみなして、評価した結果の文字列をマップ先とします。
ファイルタイプ
http://ftp.vim.org/pub/vim/runtime/indent/
vimの難しい表現
バッファとウィンドウとタブ
バッファ:普通のテキストエディタでいうところの開いたファイルのこと
ウィンドウ:今見えているvimの中にある画面のこと。分割表示したときに増える
タブ:普通のテキストエディタのタブと同じ。バッファを使ったほうがよい。
コマンド
コマンド一覧と覚え方
http://haya14busa.com/vim-mnemonic/
よく忘れるコマンド
http://www3.kcn.ne.jp/~okina/vim_blank.html
カーソル下の単語削除
コマンド | 説明 |
---|---|
daw | カーソル位置の単語を削除(空白含む) (d + a word) |
diw | カーソル位置の単語を削除 (d + inner word) |
g で始まるコマンドというかキーマップまとめ
http://h-miyako.hatenablog.com/entry/2015/01/31/185620
自動的にマークされる
コマンド | 説明 |
---|---|
^ | 最後に挿入モードを抜けた場所 |
. | 最後に変更を加えた場所 |
' or ` | 最後にジャンプした時にいた場所 |
" | バッファを終了した時にいた場所 |
0~9 | vimを終了する時にいた場所 |
http://d.hatena.ne.jp/xaxe/20070122
戻る系
コマンド | 説明 |
---|---|
@: | 最後に実行したコマンドを実行する |
; | 移動の繰り返し(右方向) |
, | 移動の繰り返し(左方向) |
& | 最後に実行した編集を実行する |
. | 編集の繰り返し |
`. | 最後の編集位置へ |
g; | 編集位置をさかのぼる |
gv | 最後のv選択位置へ |
v選択後 o | 選択範囲の最初/最後へ |
Ctrl-^ | 直近開いたバッファへ |
Ctrl-o | カーソルの移動位置を元いた場所に戻す |
Ctrl-i | カーソルの移動位置を元いた場所に進む |
画面操作
コマンド | 説明 |
---|---|
H | 画面の一番上の行へ移動 |
L | 画面の一番下の行へ移動 |
Ctrl-e | 1行下にスクロール |
Ctrl-y | 1行上にスクロール |
Ctrl-f | 1画面下にスクロール |
Ctrl-b | 1画面上にスクロール |
Ctrl-d | 半画面下にスクロール |
Ctrl-u | 半画面上にスクロール |
補完コマンド
補完機能 | コマンド |
---|---|
行全体 | CTRL-X CTRL-L |
現在のファイルのキーワード | CTRL-X CTRL-N |
'dictionary'のキーワード | CTRL-X CTRL-K |
'thesaurus'のキーワード, thesaurus-style | CTRL-X CTRL-T |
編集中と外部参照しているファイルのキーワード | CTRL-X CTRL-I |
タグ | CTRL-X CTRL-] |
ファイル名 | CTRL-X CTRL-F |
定義もしくはマクロ | CTRL-X CTRL-D |
Vimのコマンドライン | CTRL-X CTRL-V |
ユーザ定義補完 | CTRL-X CTRL-U |
オムニ補完 | CTRL-X CTRL-O |
スペリング補完 | CTRL-X s |
'complete'のキーワード | CTRL-N |
補完を中止したいときは「CTRL-E」を押すといいらしい。
コマンドモードの履歴を検索
ctrl-f
矩形選択での上書き
ctrl+vで領域選択後
c 矩形を置換
rでなくてc
バッファの移動
<C-^>:一つ前に開いていたファイルに移動
バッファ番号 CTRL+^
もしくは
:buffer バッファ番号
:b バッファ番号
http://blog.livedoor.jp/nakamura_tech/archives/51363029.html
ヘッダファイルを開く
「Ctrl-w gf」タブでファイルを開く。 タブとして開くので、ノーマルモードで「gt」で移動
ウィンドウ操作
ウィンドウ移動
コマンド | 説明 |
---|---|
Ctrl W + R | To rotate windows up/left. |
Ctrl W + r | To rotate windows down/right. |
Ctrl W + L | Move the current window to the "far right" |
Ctrl W + H | Move the current window to the "far left" |
Ctrl W + J | Move the current window to the "very bottom" |
Ctrl W + K | Move the current window to the "very top" |
Ctrl W + x OR Ctrl W + Ctrl x | Rotates the current focused window with |
CTRL-W t CTRL-W H | 横分割 -> 縦分割への切り替え |
CTRL-W t CTRL-W K | 縦分割 -> 横分割への切り替え |
CTRL-W T | カレントウィンドウをタブとして移動する |
ウィンドウ分割
コマンド | 説明 |
---|---|
:vertical {cmd} | 垂直分割をするようにします。例えば、:vertical split は :vsplit のような動作になります。 |
:leftabove {cmd} :aboveleft {cmd} | 水平分割なら上に、垂直分割なら左に新しいウィンドウを作ります。 |
:rightbelow {cmd} :belowright {cmd} | 水平分割なら下に、垂直分割なら右に新しいウィンドウを作ります。 |
:topleft {cmd} | 水平分割なら画面の一番上に、垂直分割なら画面の一番左に、それぞれ幅、高さが最大になるように新しいウィンドウを作ります。 |
:botright {cmd} | 水平分割なら画面の一番下に、垂直分割なら画面の一番右に、それぞれ幅、高さが最大になるように新しいウィンドウを作ります。 |
コマンドモード中にペースト
コマンド | 説明 |
---|---|
Ctrl-R" | コマンドモード中にヤンクからペーストを行う。Rはレジスタと覚える。デフォルトレジスタ「"」 |
Ctrl-R/ | コマンドモード中にコマンド欄で検索した文字をペースト |
Ctrl-W x | ウィンドウを入れ替える |
バッファの設定
http://leafcage.hateblo.jp/entry/2013/11/21/083830
マーク
コマンド | 説明 |
---|---|
ma | 現在のカーソル位置をマーク名 a に保存 |
'a | マーク名 a の位置に移動 |
設定の説明
complete
.: The current buffer
w: Buffers in other windows
b: Other loaded buffers
u: Unloaded buffers
t: Tags
i: Included files
Tips
ファイルパスのデリミタ設定
ファイルパスのデリミタ設定
function! AddPath(pathlist) abort " {{{
let pathlist = split($PATH, s:delimiter)
for path in map(filter(a:pathlist, 'v:val'), 'expand(v:val)')
if isdirectory(path) && index(pathlist, path) == -1
call insert(pathlist, path, 0)
endif
endfor
let $PATH = join(pathlist, s:delimiter)
endfunction " }}}
call AddPath([
\ '/usr/local/texlive/2013/bin/x86_64-linux',
\ '/usr/local/texlive/2013/bin/x86_64-darwin',
\ '~/.pyenv/bin',
\ '~/.plenv/bin',
\ '~/.rbenv/bin',
\ '~/.ndenv/bin',
\ '~/.pyenv/shims',
\ '~/.plenv/shims',
\ '~/.rbenv/shims',
\ '~/.ndenv/shims',
\ '~/.anyenv/envs/pyenv/bin',
\ '~/.anyenv/envs/plenv/bin',
\ '~/.anyenv/envs/rbenv/bin',
\ '~/.anyenv/envs/ndenv/bin',
\ '~/.anyenv/envs/pyenv/shims',
\ '~/.anyenv/envs/plenv/shims',
\ '~/.anyenv/envs/rbenv/shims',
\ '~/.anyenv/envs/ndenv/shims',
\ '~/.cabal/bin',
\ '~/.vim/bundle/vim-themis/bin',
\])
外部プログラムの実行
makeprg xxx make
eg.
function! Cppcheck_1()
setlocal makeprg=cppcheck\ --enable=all\
" earlier it was: " setlocal errorformat=[%f:%l]:%m
" fixed by an advise by Mr. Ingo Karkat
setlocal errorformat+=[%f:%l]\ ->\ %m,[%f:%l]:%m
let curr_dir = expand(':h')
if curr_dir == ''
let curr_dir = '.'
endif
echo curr_dir
execute 'lcd ' . curr_dir
execute 'make'
execute 'lcd -'
exe ":botright cwindow"
:copen
endfunction
vimの起動が遅いときの調査方法
vim -X --startuptime /tmp/speedcheck.txt
最小構成
touch vimrc
vim -u vimrc --noplugin --startuptime /tmp/speedcheck_org.txt
sort -k3 /tmp/speedcheck.txt
message(more-prompt)で検索できるようにする
:redir @a
:imap
:redir END
:new
:put a
http://stackoverflow.com/questions/18817614/how-do-i-change-vims-internal-pager-to-something-else
タブのスペースを2に
:set ts=2
:set shiftwidth=2