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

results matching ""

    No results matching ""