katapedia
  • README
  • doc
    • Ansible
    • Assert
    • Astah
    • Autohotkey
    • CI
    • C_Cpp
    • CentOS6x系でhttp認証に失敗する
    • Chef
    • Clipboard
    • コーディング
    • Configure
    • Console2_NYAOS
    • Debian系RedHat系の違い
    • DesignDoc目次サンプル
    • Docker
    • Doxygenコメント規約
    • Eclipse
    • Excel
    • FAQ
    • Footer
    • Git
    • GitBucket
    • GitBucketとJenkins連携
    • GitBucketとRocketChat連携
    • GitHub
    • GitLab
    • Gitで大量のファイルの中から必要ファイルのみをaddする方法
    • GitのGUI比較
    • Gitのリポジトリがでかくなったときの削減の昔のやり方
    • Gitワークフロー
    • Go
    • Googletest
    • Gradle
    • Grafana
    • Groovy
    • Haroopad
    • Haskell
    • Htmlpdfに直リンクする(ダウンロードしない)方法
    • IT業界
    • Java
    • Javascript
    • Javascriptrライブラリ・フレームワーク一覧
    • Jenkins
    • JetBrains_IDE
    • Linux
    • Linux Command
    • Linux Distribution
    • Makefile
    • Maven
    • MicrosoftProject
    • NoSQL
    • Omniauthによるアカウント統合
    • Outlook
    • PHP
    • Prometheus_Loki
    • Python
    • RDB
    • Redmine
    • RedmineDドライブへの保存
    • Redmineアップデート
    • Redmineプラグイン
    • Redmineメール通知
    • Redmine文字化け
    • Ruby
    • Rust
    • R言語
    • SVN
    • Sidebar
    • Solaris
    • Staticまとめ
    • Terraform
    • Thinkpad
    • Tmux
    • ToDoリスト
    • UML
    • Vagrant
    • Vim/Neovim
    • VirtualBox
    • Visio
    • Webアプリケーション
    • Webサーバ
    • Webブラウザ
    • Webブラウジング
    • Webページ備忘録
    • Windows
    • Word
    • Zabbix
    • Zsh
    • C#
    • dotfiles
    • html_css
    • Lua
    • sonarqube
    • terminal
    • tweetまとめ
    • xrdp
    • お預り証サンプル
    • その他Webサービス
    • その他ツール
    • よく使う英語
    • アジェンダサンプル
    • アジャイル宣言
    • アンチパターン
    • インシデント
    • エディタ・IDE
    • エンジニアリングスキル
    • オンプレミスサーバ管理
    • オープンソースライセンス
    • キックオフミーティング
    • コミットメッセージでよく使う英語
    • サーバデータ移行
    • サーバ環境構築
    • シェルスクリプト
    • セキュリティ
    • ソフトウェア開発
    • チャットツール
    • チーム構築
    • ツール調査履歴
    • テスト
    • デザイン
    • デザインパターン
    • ドキュメント
    • ネットワーク
    • ノート
    • バージョン番号
    • ビジネスモデル
    • プラクティス一覧
    • プラグイン調査
    • プログラマがやってはいけない97のこと
    • プログラミングテクニック
    • プログラム
    • プログラムエラー集
    • プロジェクトマネージメント
    • プロダクトマネージメント
    • ヘルプ文
    • ライフハック
    • リソース設計
    • リバースエンジニアリングツール
    • リリースノート
    • リリースノートサンプル1
    • リンク
    • レビュー
    • 人月の神話
    • 人間のあれこれ
    • 仕事のあれこれ
    • 会議
    • 作業報告項目サンプル
    • 例外処理
    • 勉強
    • 名言・教訓
    • 品質管理
    • 教育
    • 数学
    • 文書レビュー観点
    • 朝会
    • 未来技術
    • 林檎の木のものを持ってきた
    • 正規表現
    • 物理
    • 知識データベース
    • 紛らわしい・似たような用語
    • 経営
    • 経済
    • 自作template_class_でundefined_reference_to
    • 要求分析・要件定義
    • 見積もり
    • 設計
    • 評価
    • 認証
    • 議事録サンプル
    • 運用・保守
    • 開発インフラ
    • 開発環境
    • 開発計画
    • 関数名でよく使われる英単語
    • 関数命名規約
    • 関数型言語
    • 雑多メモ
    • 面接
Powered by GitBook
On this page
  • vimとは
  • コマンド一覧と覚え方
  • よく忘れるコマンド
  • 検索のときに条件の一部だけ置換する
  • surroundで複数行囲む
  • Quickfixの過去履歴を表示
  • 検索した単語を置換する
  • カーソル下の単語削除
  • g で始まるコマンドというかキーマップまとめ
  • 自動的にマークされる
  • 戻る系
  • 以前の編集点に戻る
  • コマンドモードの履歴を検索
  • 画面操作
  • 補完コマンド
  • 最後に実行したコマンドを実行する
  • 最後に実行した編集を実行する
  • カーソルの移動位置を戻す
  • 矩形選択での上書き
  • バッファの移動
  • 直前に開いていたファイルを開く
  • ヘッダファイルを開く
  • ウィンドウ操作
  • コマンドモード中にペースト
  • バッファ
  • マーク
  • 折りたたみ
  • 表示更新
  • 矩形貼り付け
  • 辞書に追加
  • 一時的に計算する
  • Vim間でviminfoを使って(クリップボードを使わずに)ヤンクする
  • vimの基礎
  • リストいろいろ
  • マップ
  • ファイルタイプ
  • ファイルパスのデリミタ設定
  • 変数の値を参照
  • 外部プログラムの実行
  • よくミスる書き方
  • autocmdにautgroupがない
  • mapにs:
  • 設定
  • complete
  • プラグイン
  • ctrlp
  • CCTree
  • Unite
  • vim-clang
  • quickrun
  • syntastic
  • The NERD Commenter
  • fugitive.vim
  • surround.vim
  • プラグイン検索
  • ほしいプラグイン
  • 使ってみたいプラグイン
  • プラグイン調査
  • clipboard|クリップボード連携
  • リンク
  • カラースキーマ
  • 小ネタ
  • 一行コピーしてしてしまったが文の途中に差し込みたい
  • 起動速度改善
  • デフォルトとの起動時間比較一行野郎
  • プロファイリング
  • message(more-prompt)で検索できるようにする
  • タブのスペースを2に
  • vim srcexpl でtagsファイルを隠しファイルにする
  • 画面のみ移動
  • ハット(hat)の入力
  • viバイナリモード
  • ESC入力で日本語IME解除
  • 全部入りVimのインストール
  • VimScript
  • メッセージを抑制する
  • リストから重複を削除する
  • リストから空値を削除する
  • 変数の存在確認
  • vimdiff
  • Tips
  • コマンドでウィンドウサイズ変更
  • 自動でウィンドウサイズを変更しないようにする
  • 連続するスペースを置換する
  • 関数が存在しているか判定する
  • オプション(set xxx)が存在しているか判定する
  • 16進表示にする
  • 3つの波括弧の意味
  • プラグインの更新だけを行いたいエラーを確認したい
  • 改行無視して検索したい
  • エラーメッセージを目立たせたい
  • FAQ
  • インサートモードで次の行に移動する
  • if文をワンライナーで
  • batch mode(コマンドライン)でexit code 0以外で終了させる
  • 最短一致
  • 途中からのパスをgfで開けない
  • 言語ごとの基本的なvimrcがほしい
  • 今のファイル名をインサートしたい
  • 特殊キーのマッピングがうまくいかない
  • ウィンドウとバッファの違い
  • 置換処理中に前の単語に戻りたい
  • シンタックスを再読み込みしたい
  • E21: 'modifiable' がオフなので,変更できません
  • noremapとmap
  • mapによくある
  • vim-clangでウィンドウが勝手に閉じる
  • デバッグログを出す
  • コマンドを履歴検索して実行
  • 補完時をキャンセルしたい
  • ubuntuでluaを再コンパイルせずに入れたい
  • TroubleShooting
  • 矩形選択で置換したい
  • mapがどこで定義されているかを知る
  • neovimでSSH先でうまくクリップボード共有がされない
  • neovimでmarkをdelmarkしても開き直したら復活する
  • quickrunのパッチ
  • quickfixstatus.vimのパッチ
  • リンク
  1. doc

Vim/Neovim

PreviousVagrantNextVirtualBox

Last updated 5 years ago

vimとは

コマンド一覧と覚え方

よく忘れるコマンド

検索のときに条件の一部だけ置換する

:%s/\zsa\zeq/S/g

surroundで複数行囲む

  1. Shift + v

  2. :normal yss' ('で囲むとき)

インデントがあるとうまく行かないので一度左に詰めるようにする

Quickfixの過去履歴を表示

  • chi

  • 戻るとき: col

検索した単語を置換する

cgn 普通に検索orアスタリスクで検索→cgn->置換したあとの文字を入力→nで移動→ドットリピート

カーソル下の単語削除

daw カーソル位置の単語を削除(空白含む) (d + a word)

diw カーソル位置の単語を削除 (d + inner word)

g で始まるコマンドというかキーマップまとめ

自動的にマークされる

^ 最後に挿入モードを抜けた場所

. 最後に変更を加えた場所

' or ` 最後にジャンプした時にいた場所

" バッファを終了した時にいた場所

0~9 vimを終了する時にいた場所

戻る系

@: コマンドの繰り返し

; 移動の繰り返し(右方向)

, 移動の繰り返し(左方向)

& sコマンドの繰り返し

. 編集の繰り返し

'. 最後の編集位置へ

gv 最後のv選択位置へ

v選択後 o 選択範囲の最初/最後へ

直近開いたバッファへ

以前の編集点に戻る

`. カーソル位置へジャンプする

g; 編集位置をさかのぼる

コマンドモードの履歴を検索

ctrl-f

画面操作

H 画面の一番上の行へ移動

L 画面の一番下の行へ移動

Ctrl-e 1 行下にスクロール

Ctrl-y 1 行上にスクロール

Ctrl-f 1 画面下にスクロール

Ctrl-b 1 画面上にスクロール

Ctrl-d 半画面下にスクロール

Ctrl-u 半画面上にスクロール

補完コマンド

補完機能

キーマップ

1. 行全体

CTRL-X CTRL-L

1. 行全体

CTRL-X CTRL-L

2. 現在のファイルのキーワード

CTRL-X CTRL-N

3. 'dictionary'のキーワード

CTRL-X CTRL-K

4. 'thesaurus'のキーワード, thesaurus-style

CTRL-X CTRL-T

5. 編集中と外部参照しているファイルのキーワード

CTRL-X CTRL-I

6. タグ

CTRL-X CTRL-]

7. ファイル名

CTRL-X CTRL-F

8. 定義もしくはマクロ

CTRL-X CTRL-D

9. Vimのコマンドライン

CTRL-X CTRL-V

10. ユーザ定義補完

CTRL-X CTRL-U

11. オムニ補完

CTRL-X CTRL-O

12. スペリング補完

CTRL-X s

13. 'complete'のキーワード

CTRL-N

補完を中止したいときは「CTRL-E」を押すといいらしい。

最後に実行したコマンドを実行する

@:

最後に実行した編集を実行する

&

カーソルの移動位置を戻す

元いた場所に戻る:

元いた場所に進む:

矩形選択での上書き

ctrl+vで領域選択後

c 矩形を置換

rでなくてc

バッファの移動

バッファ番号 CTRL+^

もしくは

:buffer バッファ番号

:b バッファ番号

直前に開いていたファイルを開く

C-^ ... 一つ前に開いていたファイルに移動

ヘッダファイルを開く

「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}

水平分割なら画面の一番下に、垂直分割なら画面の一番右に、それぞれ幅、高さが最大になるように新しいウィンドウを作ります。

コマンドモード中にペースト

" :コマンドモード中にヤンクからペーストを行う

Rはレジスタと覚える

デフォルトレジスタ「"」

/:コマンドモード中にコマンド欄で検索した文字をペースト

Ctrl-W x:ウィンドウを入れ替える

バッファ

:元いた場所にも取る

:元いた場所に進む

バッファの設定

マーク

ma:現在のカーソル位置をマーク名 a に保存

'a:マーク名 a の位置に移動

折りたたみ

zo:カーソル下にある折りたたみをひとつ開く

zO:カーソル下にある折りたたみを全て開く

zc:カーソル下にある折りたたみをひとつ閉じる

zC:カーソル下にある折りたたみを全て閉じる

zf : 選択した範囲が折り畳み

表示更新

Ctrl+l

矩形貼り付け

  1. Ctrl+vで矩形選択モードにする

  2. 範囲選択したあとにCtrl+Iで入力モードにする

  3. Ctrl+rを押して"入力でヤンクした内容をペースト

  4. ESCで抜けて複数行に反映

辞書に追加

]s 次のスペルミスの箇所へ移動

[s 前のスペルミスの箇所へ移動

z= 正しいスペルの候補を表示し、選択した単語でスペルミスを修正

zg カーソル下の単語を正しいスペルとして辞書登録

zw カーソル下の単語を誤ったスペルとして辞書登録

一時的に計算する

insertモードで

=

Vim間でviminfoを使って(クリップボードを使わずに)ヤンクする

ヤンクしたあと

:wv: 書き出し

ペーストする前に :rv!: 読み込み

行数が足りないときは set viminfo='20,\"50 の50のところを調整する

vimの基礎

リストいろいろ

:history

:registers

:marks

:ls (:buffers)

:args

:jumps

:changes

:tags

マップ

コマンド

ノーマルモード

挿入モード

コマンドラインモード

ビジュアルモード

map/noremap

○

-

-

○

map/noremap

○

-

-

○

nmap/nnoremap

○

-

-

-

imap/inoremap

-

○

-

-

cmap/cnoremap

-

-

○

-

vmap/vnoremap

-

-

-

○

map!/noremap!

-

○

○

-

キーマッピングのオプション

:コマンドラインへの出力を抑制します。キーマッピングからコマンドを実行する場合などに指定します。

:すでにマッピングが存在する場合、エラーにします。通常は上書きされます。

:バッファローカルなキーマッピングを定義します。を付けるとVim起動時に最初に表示されるバッファのみでしか定義されず他のバッファで使えなくなる。

:マップ先の文字列を Vim の式とみなして、評価した結果の文字列をマップ先とします。

ファイルタイプ

ファイルパスのデリミタ設定

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',
])

変数の値を参照

let はecho $

set は path?

キーバインドは :help C-o

外部プログラムの実行

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

よくミスる書き方

autocmdにautgroupがない

augroup MyXXX
  autocmd!
  autocmd XXX
augroup END

mapにs:

map, noremapはs:xxxの代わりににしなくては動かない

設定

complete

.: The current buffer

w: Buffers in other windows

b: Other loaded buffers

u: Unloaded buffers

t: Tags

i: Included files

プラグイン

ctrlp

実行中に をタイプすると部分一致検索モードから正規表現検索モードにスイッチします。入力した文字を正規表現パターンとしてファイルを検索出来ます。

もう一度タイプすると通常モードに戻ります。また でフルパスモードからファイル名モードへ、 でMRUファイル検索、 でバッファ検索へとスイッチ出来ます。

CCTree

cscopeかccglueをインストールしておく

cscope -R -b
CCTreeLoadDB $HOME/cscope.out
CCTreeTraceForward

Unite

コマンド出力をUniteにする

:Unite output

map

vim-clang

.clangにパスを書く -I/usr/local/include

の形式

.lvimrcとかだとあとから読まれるため反映されない。

pathに追加してもいけるが、これも.vimrcに記述する必要がある。

quickrun

let g:quickrun_config = {
   "cpp" :{
       "type" : "my_cpp"
   },
   "my_cpp" : {
       "command"   : "LANG=C make",
       "exec" : "LANG=C make -f Makefile64.lin86 test",
       "cmdopt" : "-f Makefile64.lin86",
   },
}

色を付ける

~/.vim/syntax/quickrun.vim

let g:quickrun_config = {}

augroup QrunRSpec
autocmd!
autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
augroup END

let rspec_outputter = quickrun#outputter#buffer#new()
function! rspec_outputter.init(session)
call call(quickrun#outputter#buffer#new().init,  [a:session],  self)
endfunction

function! rspec_outputter.finish(session)
highlight default RSpecGreen ctermfg = Green cterm = none
highlight default RSpecRed    ctermfg = Red   cterm = none
highlight default RSpecComment ctermfg = Cyan  cterm = none
highlight default RSpecNormal  ctermfg = White cterm = none
call matchadd("RSpecGreen", "^[.F]*.[.F]*$")
call matchadd("RSpecGreen", "^.*, 0 failures$")
call matchadd("RSpecRed", "F")
call matchadd("RSpecRed", "^.*, [1-9]* failures.*$")
call matchadd("RSpecRed", "^.*, 1 failure.*$")
call matchadd("RSpecRed", "^ *(.*$")
call matchadd("RSpecRed", "^ *expected.*$")
call matchadd("RSpecRed", "^ *got.*$")
call matchadd("RSpecRed", "^ *Failure/Error:.*$")
call matchadd("RSpecRed", "^.*(FAILED - [0-9]*)$")
call matchadd("RSpecRed", "^rspec .*:.*$")
call matchadd("RSpecComment", " # .*$")
call matchadd("RSpecNormal", "^Failures:")
call matchadd("RSpecNormal", "^Finished")
call matchadd("RSpecNormal", "^Failed")

call call(quickrun#outputter#buffer#new().finish,  [a:session], self)
endfunction

call quickrun#register_outputter("rspec_outputter", rspec_outputter)
let g:quickrun_config['ruby.rspec'] = {
 'command': 'rspec',
 'outputter': 'rspec_outputter',
 }

出力後最終行に行くようにする

vim-quickrun/autoload/quickrun/outputter/buffer.vim

64 "  silent normal! zt
65   silent normal! G

syntastic

let g:syntastic_cpp_include_dirs = ['$HOME/Workspace/include',
 '$HOME/Workspace/include2']

The NERD Commenter

コメントアウト省力化

c

nmap / NERDCommenterToggle

vmap / NERDCommenterToggle

fugitive.vim

過去ソースを参照しつつ修正

:Gdiff

:Gblame

surround.vim

クオートとかを便利に入力

コマンド

動作

ds'

文を囲んでいる ' を消す

ds'

文を囲んでいる ' を消す

di'

' で囲まれた部分を消す

cs'"

' を " に変更

ci'

' で囲まれた部分を消して, インサートモードに入る

S'

ビジュアルモードで選択した部分を ' で囲む

yss'

文を ' で囲む

ysiw'

カーソルがある単語を ' で囲む

ds ・・・ d(delete)s(surround)

di ・・・ d(delete)i(inside)

cs ・・・ c(change)s(surround)

ci ・・・ c(change)i(inside)

yss ・・・y(yank)s(surround)s(sentence)

ysiw ・・・ y(yank)s(surrond)iw(inner word)

プラグイン検索

ほしいプラグイン

  • yank時に内容を一時表示するプラグイン

  • 置換時にundoできるプラグイン

    %s:/xxx/yyy/gcで確認しながら置換する際にNで戻ることができない。

これを実現する。

  • 検索時に一周した場合画面にわかりやすく大きく表示するプラグイン

  • デフォルトのコマンド出力をMoreよりもわかりやすくするプラグイン。検索できたりとか

  • tagsの結果をunite ->unite-tag があるがデフォルトの方が使いやすい。。。

  • cscopeの結果をunite-cscopeがあるがデフォルトの方が使いやすい。。。

  • tabで重複してファイルを開くとすでにあるタブが開かれる

  • 検索時のハイライトをカレントウィンドウだけにする

  • insert modeの入力をrepeat(".")に加えないようにする

  • コマンドhistoryでwとかqとかを表示しないようにするプラグイン

    これが近いが、q:で表示されてしまう。viminfoにいれないようにしたい

使ってみたいプラグイン

kana/vim-altr.git

kana/vim-filetype-haskell.git

kana/vim-niceblock.git

kana/vim-operator-replace.git

kana/vim-operator-user.git

kana/vim-submode.git

kana/vim-textobj-entire.git

kana/vim-textobj-fold.git

kana/vim-textobj-indent.git

kana/vim-textobj-line.git

kana/vim-textobj-syntax.git

kana/vim-textobj-user.git

リンク

カラースキーマ

小ネタ

一行コピーしてしてしまったが文の途中に差し込みたい

普通にpすると一行したに挿入されてしまう。 そういうときはvp。ビジュアルモードにしてから貼り付ければ途中に貼り付けられる。改行はされるが、Jで結合する。

起動速度改善

vim -X --startuptime /tmp/speedcheck.txt

最小構成

touch vimrc
vim -u vimrc --noplugin --startuptime  /tmp/speedcheck_org.txt

sort -k3 /tmp/speedcheck.txt

デフォルトとの起動時間比較一行野郎

echo "scale=3; $(vi --startuptime /tmp/stime_mine.log -c 'quit' > /dev/null && tail -n 1 /tmp/stime_mine.log | cut -d ' ' -f1) / $(vi -u DEFAULTS --startuptime /tmp/stime_def.log -c 'quit' > /dev/null && tail -n 1 /tmp/stime_def.log | cut -d ' ' -f1)" | bc | xargs -i echo {}x slower your Vim than the default.

プロファイリング

vi -c 'profile start profile.log' -c 'profile func *' -c 'call timer_start(0, {->execute("quit")})'; cat profile.log

message(more-prompt)で検索できるようにする

:redir @a
:imap
:redir END
:new
:put a

タブのスペースを2に

:set ts=2
:set shiftwidth=2

vim srcexpl でtagsファイルを隠しファイルにする

set tags=".tags"
"tags"->".tags"
set "tags = tags" -> set "tags = .tags"

画面のみ移動

^y ^e

ハット(hat)の入力

ctrl + v + ~

viバイナリモード

vi -b
のあと
:%!xxd

ESC入力で日本語IME解除

viの設定ではなくmozc(google日本語入力)で対応する。

keymapのカスタマイズで新しいエントリとして「直接入力、入力文字なし」->キャンセル後IME無効化

で設定できる。

全部入りVimのインストール

プラグイン利用時に必要になる(+lua等)が使えるvimをインストールする

ubunut

sudo apt-get remove --purge vim vim-runtime vim-gnome vim-tiny vim-common vim-gui-common
sudo apt-get install liblua5.1-dev luajit libluajit-5.1 python-dev ruby-dev libperl-dev mercurial libncurses5-dev libgnome2-dev libgnomeui-dev libgtk2.0-dev libatk1.0-dev libbonoboui2-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev

sudo mkdir /usr/include/lua5.1/include
sudo ln -s /usr/include/luajit-2.0 /usr/include/lua5.1/include

cd ~
hg clone https://code.google.com/p/vim/
cd vim/src
make distclean
./configure --with-features=huge             --enable-rubyinterp             --enable-largefile             --disable-netbeans             --enable-pythoninterp             --with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu             --enable-perlinterp             --enable-luainterp             --with-luajit             --enable-gui=auto             --enable-fail-if-missing             --with-lua-prefix=/usr/include/lua5.1             --enable-cscope
make

sudo make install

Centos

perlは有効にできなかった

sudo yum remove vim-common vim-X11 vim-enhanced
sudo yum install lua-devel ruby ruby-devel python python-devel
./configure --with-features=huge --enable-rubyinterp --enable-largefile --disable-netbeans --enable-pythoninterp --enable-luainterp --enable-gui=auto --enable-fail-if-missing --enable-cscope  --with-lua-prefix=/usr  --enable-multibyte

VimScript

接頭辞

意味

g:varname

指定の変数をグローバル変数として指定

g:varname

指定の変数をグローバル変数として指定

s:varname

指定の変数をカレント・スクリプト・ファイルのローカル変数として指定

w:varname

指定の変数をカレント・エディター・ウィンドウのローカル変数として指定

t:varname

指定の変数をカレント・エディター・タブのローカル変数として指定

b:varname

指定の変数をカレント・エディター・バッファーのローカル変数として指定

l:varname

指定の変数を現行関数のローカル変数として指定

a:varname

指定の変数を現行関数のパラメーターとして指定

v:varname

指定の変数を Vim 事前定義変数として指定

接頭辞

意味

&varname

Vim オプション (定義がある場合はローカル・オプション。そうでなければグローバル・オプション)

&varname

Vim オプション (定義がある場合はローカル・オプション。そうでなければグローバル・オプション)

&l:varname

ローカル Vim オプション

&g:varname

グローバル Vim オプション

@varname

Vim レジスター

$varname

環境変数

メッセージを抑制する

silent

リストから重複を削除する

let unduplist=filter(copy(list), 'index(list, v:val, v:key+1)==-1')

リストから空値を削除する

let validlist=filter(copy(list), "v:val !~ '^$'")

変数の存在確認

  • global: get(g:, 'aaa')

  • script local: exists('s:xxx')

あるなしなら グローバルでも exists('g:xxx') でいいが、中身を精査したい場合はgetのほうがいい

vimdiff

コマンド

意味

[ c

次の違いがある場所にジャンプ diff put

] c

前の違いがある場所にジャンプ diff obtain

do

今開いてるバッファに他のバッファの差分を取り込む :diffget と同じ

dp

もう一つのバッファに今開いてるバッファの差分を入れる。:diffput と同じ

Tips

コマンドでウィンドウサイズ変更

resize -3 vertical resize -3

自動でウィンドウサイズを変更しないようにする

set noequalalways

連続するスペースを置換する

:s/[ ]\+/aaa/g

関数が存在しているか判定する

exists('*xxx')

オプション(set xxx)が存在しているか判定する

echo exists('&xxx')

シングルクオートが必要なので注意

16進表示にする

00 01 02 03 04 -> 0x00 0x01 0x02 0x03 0x04

単語置換 :%s/\(\w\w\)/0x\1/g

3つの波括弧の意味

三重の中括弧

折りたたみのデフォルトマーカー

プラグインの更新だけを行いたいエラーを確認したい

CIのときなどに使用

echo "" | v -c "q" |& grep "Press ENTER" | wc -l

改行無視して検索したい

最長一致

_,

最短一致

_.{-}

エラーメッセージを目立たせたい

hi WarningMsg ctermfg=white ctermbg=red guifg=White guibg=Red gui=None

FAQ

インサートモードで次の行に移動する

  • Ctrl-Right

  • Ctrl-O k

if文をワンライナーで

if exists(':PlugInstalla') | qall | else | cq | endif

batch mode(コマンドライン)でexit code 0以外で終了させる

:cq

最短一致

``で囲まれた範囲最短一致
v`.{-}`

vでvery magicと扱い、{-}をしたほうがバックスラッシュで色々かわさなくていいので楽
よくある*?ではない

途中からのパスをgfで開けない

pathを設定する

先頭のスラッシュを除去する

言語ごとの基本的なvimrcがほしい

今のファイル名をインサートしたい

:put %

:r! basename %

:=file

特殊キーのマッピングがうまくいかない

以下のものは同一視される

==

==

==

ウィンドウとバッファの違い

ウィンドウ::今見えている領域。splitを含む(splitすると1つのバッファに2つのウィンドウが表示される)。qで閉じる部分。

バッファ:基本的には1つのバッファ=1つのファイルです。:buffersで確認できる。

置換処理中に前の単語に戻りたい

基本的にはできない。工夫するしかない。プラグインも思わしくない

シンタックスを再読み込みしたい

:syntax on

E21: 'modifiable' がオフなので,変更できません

vimでQuickFixListのような特殊なウィンドウをいじろうとしたら出た

:set modifiable

:set write

noremapとmap

noremapは他でmapを変更していても素のvimの設定をマッピングする(再割当てしない)。

mapは他で変更していた場合は変更されたあとの設定となる(再割当てする)。

素のvimのマッピングを変更したいときはnoremapを使おう!

があるときはmapを使おう!

mapによくある

範囲選択<,'>を消しているらしい

vim-clangでウィンドウが勝手に閉じる

" au BufUnload call DiagnosticsPreviewWindowCloseWhenLeave()

" au BufWinLeave call DiagnosticsPreviewWindowCloseWhenLeave()

au BufDelete call DiagnosticsPreviewWindowCloseWhenLeave()

BufWinLeave でもBufDelete でもいけるっぽい

デバッグログを出す

vim -V9logfile.log

コマンドを履歴検索して実行

bashのCtrl-rみたいなことをやりたい場合

You can use q/ just like q: to view the search history.

補完時をキャンセルしたい

Ctrl+eを押す

恒久的には

noremap pumvisible() ? "a" : ""

ubuntuでluaを再コンパイルせずに入れたい

sudo apt-get install vim-gnome

を入れるとCLI版も更新される

TroubleShooting

矩形選択で置換したい

:'<,'>:s/\%Vhoge/foo/g

mapがどこで定義されているかを知る

verbose imap <CR>

neovimでSSH先でうまくクリップボード共有がされない

DISPLAYが設定されてたりしたらOSC52が使われなかったりする

とりあえずxorg-x11-xauthとxclip or xselをいれて、DISPLAY設定して、 クライアント側で、 xauth list でトークン取得して サーバー側で、 xauth add ${DISPLAY} . (token) が一番手っ取り早くていい気がする。

neovimでmarkをdelmarkしても開き直したら復活する

wshada! で直る模様。。。

quickrunのパッチ

91     execute sp

quickfixstatus.vimのパッチ

execute 'echo b:qfstatus_list[ln][:' . &co . '-13]'

リンク

わかってる人

centos7

centos6.5

http://postd.cc/vim-galore-1/#what-is-vim
http://haya14busa.com/vim-mnemonic/
http://www3.kcn.ne.jp/~okina/vim_blank.html
http://h-miyako.hatenablog.com/entry/2015/01/31/185620
http://d.hatena.ne.jp/xaxe/20070122
http://blog.livedoor.jp/nakamura_tech/archives/51363029.html
http://leafcage.hateblo.jp/entry/2013/11/21/083830
http://vim-jp.org/vimdoc-ja/map.html
http://ftp.vim.org/pub/vim/runtime/indent/
http://vimawesome.com/
http://stackoverflow.com/questions/17310432/history-ignores-in-vim
https://github.com/tyru/operator-camelize.vim
https://github.com/vim-scripts/CCTree
プラグイン調査
clipboard|クリップボード連携
http://cocopon.me/app/vim-color-gallery/
デフォルトでインストールされている
http://vimcolorschemetest.googlecode.com/svn/html/index-c.html
http://cocopon.me/blog/?p=841
http://stackoverflow.com/questions/18817614/how-do-i-change-vims-internal-pager-to-something-else
http://www.yuuan.net/item/937
http://www.yuuan.net/item/821
http://ac206223.ppp.asahi-net.or.jp/adiary/memo/adiary.cgi/hirosugu/vim%E3%81%A7%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%92%E4%BD%BF%E3%81%86
http://psycho-cafe.blogspot.jp/2014/09/vim.html
https://stackoverflow.com/questions/36599208/move-cursor-in-insert-mode-from-line2-head-to-line1-tail-in-vim
https://hail2u.net/blog/software/support-slash-started-relative-url-in-vim-gf.html
http://vim-bootstrap.com/
http://rbtnn.hateblo.jp/entry/2014/11/30/174749
http://stackoverflow.com/questions/31956485/how-can-i-switch-from-forward-to-backward-in-interactive-search-replace-regex-in
http://cocopon.me/blog/?p=3871
https://vim-jp.org/vimdoc-ja/map.html#omap-info
https://qiita.com/gotchane/items/0e7e6e0d5c7fa9f55c1a
https://github.com/neovim/neovim/issues/4288#issuecomment-186076052
vimの使い方