Last active
January 7, 2024 04:58
-
-
Save kotashiratsuka/eac44d7e569f3721be5a12b8c221cab6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" vim: set ff=unix tabstop=4 shiftwidth=0 softtabstop=-1 noexpandtab fileencoding=utf-8 fileformat=unix filetype=vim foldmethod=marker : | |
" https://gist.github.com/kotashiratsuka/eac44d7e569f3721be5a12b8c221cab6 | |
" 基本コンセプト | |
" * scp1ファイルで環境移行済ます | |
" * mac/win/linux/ios環境依存しない、エラーが出ない | |
" * 自分以外の人が触っても混乱しないようにする(rootで複数人が使う場合などに配慮) | |
" * プラグインは極力使わない、プラグインは補助輪と割り切る、どうせ数年立ったら使わなくなる | |
" * プラグイン強化するくらいならその分vimの標準操作を速くできるように頭と指を鍛える | |
" * tips混じってるけど気にしない | |
"{{{ 基本設定 | |
"ファイルタイプに応じて挙動,色を変える | |
syntax on | |
filetype plugin on | |
filetype indent on | |
"VIM互換にしない | |
set nocompatible | |
"複数ファイルの編集を可能にする | |
set hidden | |
"タイトルをバッファ名に変更する | |
set title | |
"ステータラインの表示を詰める | |
"set shortmess=atT | |
"ターミナルを高速にする | |
set ttyfast | |
"ターミナルで256色表示を使う | |
set t_Co=256 | |
"OSのクリップボードを使用する | |
set clipboard+=unnamed | |
"変更された行の数の報告をステータスラインに表示する | |
set report=0 | |
"画面端に到達してスクロールするまでの余白 | |
set scrolloff=5 | |
set sidescrolloff=8 | |
set sidescroll=1 | |
"フォールドを利用する | |
set foldenable | |
"set foldmethod=indent | |
"set foldmethod=marker | |
set foldmethod=manual | |
"カーソルがある場所を自動的に展開、格納 | |
"set foldopen=all | |
"set foldclose=all | |
"画面の左にfoldの罫線を引く | |
"set foldcolumn=1 | |
"起動時は全部開いておく | |
"set foldlevel=99 | |
"内容が変更されたら自動的にreload | |
set autoread | |
"Swapを作るまでの時間m秒 | |
"set updatetime=0 | |
"Unicodeで行末が変になる問題を解決 | |
"set ambiwidth=double | |
"行間をでシームレスに移動する | |
"set whichwrap+=h,l,<,>,[,],b,s | |
"カーソルを常に画面の中央に表示させる | |
"set scrolloff=999 | |
"バックスペースで行頭を削除する | |
set backspace=indent,eol,start | |
"改行後に「Backspace」キーを押すと上行末尾の文字を1文字消す | |
set backspace=2 | |
"移動コマンドを使ったとき、行頭に移動しない | |
set nostartofline | |
"C-X,C-Aを強制的に10進数認識させる | |
set nrformats= | |
"set nrformats=alpha | |
"コマンドラインでTABで補完できるようにする | |
set wildchar=<C-Z> | |
"C-vの矩形選択で行末より後ろもカーソルを置ける | |
set virtualedit=block | |
"コマンド、検索パターンを200まで保存 | |
set history=200 | |
"履歴に保存する各種設定 | |
set viminfo='100,/100,<1000,f50,s100,:300,c,h,! | |
"バックアップを作成しない | |
set nobackup | |
"インクリメンタルサーチを有効にする | |
set incsearch | |
"大文字小文字を区別しない | |
set ignorecase | |
"大文字で検索されたら対象を大文字限定にする | |
set smartcase | |
"行末まで検索したら行頭に戻る | |
set wrapscan | |
"自動インデントを使用する | |
set smartindent | |
set autoindent | |
"改行時なるべくインデント構造を保つ | |
set preserveindent | |
set copyindent | |
"ステータスラインにコマンドを表示 | |
set showcmd | |
"括弧の対応をハイライトする | |
set showmatch | |
"行頭の余白内で Tab を打ち込むと、'shiftwidth' の数だけインデントする。 | |
set smarttab | |
"検索結果をハイライトする | |
set hlsearch | |
"ルーラーを表示 | |
set ruler | |
"行番号を表示 | |
set number | |
"コマンドラインの高さ | |
set cmdheight=1 | |
"マクロなどの途中経過を描写しない | |
set lazyredraw | |
"新しいウィンドウは下に開く | |
"set splitbelow | |
"新しいウィンドウを右に開く | |
set splitright | |
"modelineを有効にする | |
set modeline | |
"カーソルラインを表示する | |
set cursorline | |
"目立たせるのは行だけ | |
if v:version >= 802 && !has('nvim') | |
set cursorlineopt=screenline | |
endif | |
"絵文字を全角幅で扱う | |
if v:version >= 800 | |
set emoji | |
endif | |
"ファイル保存する際<EOL>を書き込む | |
if v:version >= 800 | |
set fixendofline | |
endif | |
"ターミナルで GUI カラーを使う | |
if v:version >= 800 | |
set termguicolors | |
endif | |
"15個までタブを開く | |
set tabpagemax=15 | |
"タブラインを常に表示する | |
set showtabline=2 | |
"TAB,EOFなどを可視化する | |
set list | |
if has('unix') | |
set listchars=tab:⎸\ ,trail:-,extends:»,precedes:«,nbsp:·,eol:< | |
else | |
set listchars=tab:>-,extends:<,trail:-,eol:< | |
endif | |
" 分割線をUnicode罫線表示 | |
if has('unix') | |
set fillchars+=vert:│ | |
set fillchars+=fold:─ | |
endif | |
"eobの~を非表示にする | |
"https://github.com/vim/vim/issues/3820 | |
if (v:version > 8.2 && has("patch2508")) | |
set fillchars+=eob:\ | |
endif | |
"エンコード設定 | |
if has('unix') | |
set fileformat=unix | |
set fileformats=unix,dos,mac | |
set fileencoding=utf-8 | |
set fileencodings=utf-8,iso-2022-jp,cp932,euc-jp | |
set termencoding= | |
elseif has('win32') | |
set fileformat=dos | |
set fileformats=dos,unix,mac | |
set fileencoding=utf-8 | |
set fileencodings=iso-2022-jp,utf-8,euc-jp,cp932 | |
set termencoding= | |
endif | |
"}}} | |
"{{{ ステータスライン | |
"自動文字数カウント | |
augroup WordCount | |
autocmd! | |
autocmd BufWinEnter,InsertLeave,CursorHold * call WordCount('char') | |
augroup END | |
let s:WordCountStr = '' | |
let s:WordCountDict = {'word': 2, 'char': 3, 'byte': 4} | |
function! WordCount(...) | |
if a:0 == 0 | |
return s:WordCountStr | |
endif | |
let cidx = 3 | |
silent! let cidx = s:WordCountDict[a:1] | |
let s:WordCountStr = '' | |
let s:saved_status = v:statusmsg | |
exec "silent normal! g\<c-g>" | |
if v:statusmsg !~ '^--' | |
let str = '' | |
silent! let str = split(v:statusmsg, ';')[cidx] | |
let cur = str2nr(matchstr(str, '\d\+')) | |
let end = str2nr(matchstr(str, '\d\+\s*$')) | |
if a:1 == 'char' | |
" ここで(改行コード数*改行コードサイズ)を'g<C-g>'の文字数から引く | |
let cr = &ff == 'dos' ? 2 : 1 | |
let cur -= cr * (line('.') - 1) | |
let end -= cr * line('$') | |
endif | |
let s:WordCountStr = printf('%d/%d', cur, end) | |
endif | |
let v:statusmsg = s:saved_status | |
return s:WordCountStr | |
endfunction | |
"ステータスラインを常に表示 | |
set laststatus=2 | |
"ファイルナンバー表示 | |
set statusline=[%n] | |
"ホスト名表示 | |
set statusline+=%{matchstr(hostname(),'\\w\\+')}@ | |
"ファイル名表示 | |
set statusline+=%<%F | |
"変更のチェック表示 | |
set statusline+=%m | |
"読み込み専用かどうか表示 | |
set statusline+=%r | |
"ヘルプページなら[HELP]と表示 | |
set statusline+=%h | |
"プレビューウインドウなら[Prevew]と表示 | |
set statusline+=%w | |
"ファイルフォーマット表示 | |
set statusline+=[%{&fileformat}] | |
"文字コード表示 | |
set statusline+=[%{has('multi_byte')&&\&fileencoding!=''?&fileencoding:&encoding}] | |
"ファイルタイプ表示 | |
set statusline+=%y | |
"ここからツールバー右側 | |
set statusline+=%= | |
"skk/eskkの状態 | |
set statusline+=%{exists('*SkkGetModeStr')?SkkGetModeStr():''} | |
set statusline+=%{exists('*eskk#statusline')?eskk#statusline():''} | |
"文字バイト数/カラム番号 | |
set statusline+=[%{col('.')-1}=ASCII=%B,HEX=%c] | |
"現在文字列/全体列表示 | |
set statusline+=[C=%c/%{col('$')-1}] | |
"現在文字行/全体行表示 | |
set statusline+=[L=%l/%L] | |
"現在のファイルの文字数をカウント | |
set statusline+=[WC=%{exists('*WordCount')?WordCount():[]}] | |
"現在行が全体行の何%か表示 | |
set statusline+=[%p%%] | |
"レジスタの中身を表示 | |
"set statusline+=[RG=\"%{getreg()}\"] | |
"}}} | |
"{{{ キー設定 | |
"インサートモードで<C-C>でESCと同義 | |
inoremap <C-C> <ESC> | |
"矢印キーでは表示行単位で行移動する | |
nmap <UP> gk | |
nmap <DOWN> gj | |
vmap <UP> gk | |
vmap <DOWN> gj | |
"ZZは強制的に書き込む | |
map ZZ :wq!<CR> | |
"C-p,C-nでバッファ移動,C-dでバッファを閉じる | |
nmap <C-P> :bp<CR> | |
nmap <C-N> :bn<CR> | |
nmap <C-D> :bd<CR> | |
"ウインドウ移動はM-hjkl | |
noremap <M-h> <C-w>h | |
noremap <M-j> <C-w>j | |
noremap <M-k> <C-w>k | |
noremap <M-l> <C-w>l | |
"<M-t>で新規タブ | |
nmap <M-t> :tabnew<CR> | |
"M-p,M-nでタブ移動,M-dでタブを閉じる、M-oで開いてるタブ以外全部閉じる | |
nmap <M-p> :tabp<CR> | |
nmap <M-n> :tabn<CR> | |
nmap <M-d> :tabc<CR> | |
nmap <M-o> :tabo<CR> | |
"C-l,C-lでバッファリスト | |
nmap <C-L><C-L> :ls<CR> | |
"C-l,C-rでレジスタリスト | |
nmap <C-L><C-R> :dis<CR> | |
"C-l,C-kでキーマップリスト | |
nmap <C-L><C-K> :map<CR> | |
"C-l,C-mでマークリスト | |
nmap <C-L><C-M> :marks<CR> | |
"C-l,C-jでジャンプリスト | |
nmap <C-L><C-J> :jumps<CR> | |
"C-l,C-hでコマンドヒストリ | |
nmap <C-L><C-H> :his<CR> | |
"C-l,C-aで引数リスト | |
nmap <C-L><C-A> :args<CR> | |
"C-l,C-uでアンドゥヒストリ | |
nmap <C-L><C-U> :undolist<CR> | |
"C-w,eでファイルブラウザを横分割起動、もう一度で閉じる | |
nmap <C-W><C-E> :Lexplore! %:h<CR> | |
"C-c,C-rでカーソル語の置き換え | |
nmap <C-c><C-r> yw:%s:<C-R>0::g<LEFT><LEFT> | |
"C-c,rでyankした文字列との置き換え | |
nmap <C-c>r :%s:<C-R>0::g<LEFT><LEFT> | |
"C-c,gでカーソル語が存在する行の削除 | |
nmap <C-c>g yw:g:<C-R>0:d | |
"C-c,Gでカーソル語が存在する行以外の削除 | |
nmap <C-c>G yw:v:<C-R>0:d | |
"<Leader>celで空白行の削除 | |
nmap <Leader>cel :%s:^$\n:<CR> | |
"<Leader>cdで現在編集中のファイルのあるディレクトリに変更 | |
nmap <Leader>cd :cd %:h<CR> | |
"<Leader>cclで全てのコメント行の削除 | |
nmap <Leader>ccl :%s:^\("\\|#\\\|\*\).*$\n:<CR> | |
"カーソル下の単語検索をgを使用する | |
nnoremap * g* | |
nnoremap # g# | |
"最後に貼り付けた範囲をVモードで選択 | |
nnoremap <leader>v `[v`] | |
"<Leader>j/kで現在行の下に空行を挿入してカーソルを現在行へ戻す | |
nnoremap <leader>j O<ESC>j | |
nnoremap <leader>k o<ESC>k | |
"<Leader>/はverymagicを使う | |
nnoremap <Leader>/ /\v | |
nnoremap <Leader>? ?\v | |
"コマンドモードはemacsキーバインドにする | |
cnoremap <C-A> <Home> | |
cnoremap <C-B> <Left> | |
cnoremap <C-D> <Delete> | |
cnoremap <C-E> <End> | |
cnoremap <C-F> <Right> | |
cnoremap <C-P> <UP> | |
cnoremap <C-N> <Down> | |
cnoremap <C-K> <c-\>egetcmdline()[:getcmdpos()-2]<CR> | |
" | |
"スクロールを高速化する | |
nnoremap <C-e> 3<C-e> | |
nnoremap <C-y> 3<C-y> | |
"<ESC> or <C-C>2回ででハイライトをOFFにする | |
nmap <ESC><ESC> :noh<CR> | |
nmap <C-C><C-C> :noh<CR> | |
"<S+TAB>でexpandtabをトグル | |
function Tab_switch() | |
if &expandtab =='1' | |
set noexpandtab | |
else | |
set expandtab | |
endif | |
endfunction | |
nmap <S-TAB> :call Tab_switch()<CR> | |
"<M-w>でnowrapをトグルする | |
function Wrap_switch() | |
if &wrap =='1' | |
set nowrap | |
else | |
set wrap | |
endif | |
endfunction | |
nmap <M-w> :call Wrap_switch()<CR> | |
"dbでブラックホール送る | |
nmap db "_d | |
"Vモードで選択状態のまま連続インデント | |
xnoremap < <gv | |
xnoremap > >gv | |
"u-u/rはUndotreeを辿る | |
nmap <M-u> g- | |
nmap <M-r> g+ | |
"<Leader>uで最後の保存状態まで戻る | |
nmap <Leader>u :earlier 1f<CR> | |
"<Leader>rで上とは逆に進む、戻りすぎた時に使用 | |
nmap <Leader>r :later 1f<CR> | |
"他のvimにviminfoを送る | |
"http://nanasi.jp/articles/howto/editing/rviminfo.html | |
"nmap <Leader>vw :wviminfo<CR> | |
"nmap <Leader>vr :rviminfo<CR> | |
"開いているバッファのディレクトリに移動 | |
"if v:version >= 700 | |
" set autochdir | |
"endif | |
"Vimを終了しても undo 履歴を復元する | |
"https://vim-jp.org/vim-users-jp/2010/07/19/Hack-162.html | |
if has('persistent_undo') | |
"set undofile | |
"set undodir=~/.vimundo | |
function Enablepersistentundo() | |
if ! isdirectory( $HOME . "/.vimundo" ) | |
call mkdir( $HOME . "/.vimundo" ) | |
endif | |
set undodir=~/.vimundo | |
set undofile | |
endfunction | |
"<Leader>unで有効化する、同時にUndo履歴を書き込む、こうすれば編集後履歴を残したい時に使える | |
nmap <Leader>un :call Enablepersistentundo()<CR> | |
function Clearundohistory() | |
let old_undolevels = &undolevels | |
set undolevels=-1 | |
exe "normal a \<BS>\<Esc>" | |
let &undolevels = old_undolevels | |
unlet old_undolevels | |
endfunction | |
"<Leader>clでUndo履歴をぶっ飛ばす、persistent_undoを常時有効化してる時にリセットできる | |
nmap <Leader>cl :call Clearundohistory()<CR> | |
endif | |
"<M-g>でGrepする | |
nmap <M-g> :vimgrep %<LEFT><LEFT> | |
"Makeやgrepでcwindowを自動でひらくようにする | |
autocmd QuickfixCmdPost make,grep,grepadd,vimgrep copen | |
autocmd QuickfixCmdPost l* lopen | |
"M-f,M-bでquickfix移動、M-qで閉じる | |
nmap <M-f> :cnext<CR> | |
nmap <M-b> :cprev<CR> | |
nmap <M-q> :cclose<CR> | |
"S-Up/Downで行の入れ替え | |
nnoremap <S-Up> :<c-u>execute 'move -1-'. v:count1<cr> | |
nnoremap <S-Down> :<c-u>execute 'move +'. v:count1<cr> | |
"現在のウインドウでのみcursorlineを有効にする | |
autocmd WinLeave,InsertEnter * set nocursorline | |
autocmd WinEnter,InsertLeave * set cursorline | |
"}}} | |
"{{{ GUIやOS固有の設定 | |
"Metaキーを全て<ESC>+にリマップする | |
"https://vim.fandom.com/wiki/Fix_meta-keys_that_break_out_of_Insert_mode | |
" fix meta-keys which generate <Esc>a .. <Esc>z | |
if !has('nvim') | |
if has('unix') | |
let c = 'a' | |
while c <= 'z' | |
execute "set <M-" . c . ">=\e" . c | |
execute "imap \e" . c . " <M-" . c . ">" | |
execute "set <M-S-" . c . ">=\e" . toupper(c) | |
execute "imap \e" . toupper(c) . " <M-" . c . ">" | |
let c = nr2char(1+char2nr(c)) | |
endw | |
endif | |
endif | |
"ターミナルでマウスを使用できるようにする | |
if !has('nvim') | |
if has ("mouse") | |
set mouse=a | |
set guioptions+=a | |
set ttymouse=urxvt | |
endif | |
endif | |
"GVim | |
if has('gui') | |
"ツールバーを消す | |
set guioptions=egLta | |
"既に開いているGVIMがあるときはそのVIMを前面にもってくる | |
runtime macros/editexisting.vim | |
endif | |
"iOS | |
if has('gui_ios') | |
ifont set -q -s 12 "MesloLGS NF" | |
endif | |
"Macのみ | |
if has('gui_macvim') | |
"ウインドウポジション、サイズの設定 | |
winpos 988 44 | |
set isfname+=32 | |
set lines=99 | |
set columns=179 | |
"set linespace=2 | |
"set guifont=Menlo\ Regular:h9 | |
"set guifontwide=Menlo\ Regular:h9 | |
set guifont=MesloLGMDZNerdFontCompleteM-Bold:h8 | |
set guifontwide=MesloLGMDZNerdFontCompleteM-Bold:h8 | |
"set guifont=Ricty\ Regular\ for\ Powerline:h11 | |
"set guifontwide=Ricty\ Regular\ for\ Powerline:h11 | |
"set imdisable | |
"set iminsert=2 | |
"set imsearch=0 | |
set macmeta | |
endif | |
"APFS/HFS拡張属性を自動付与 | |
if has('mac') | |
autocmd BufWritePost *.txt | |
\ if &fenc=='utf-8' | | |
\ exec "silent !xattr -w com.apple.TextEncoding 'UTF-8;134217984' \"%\"" | | |
\ elseif &fenc=='euc-jp' | | |
\ exec "silent !xattr -w com.apple.TextEncoding 'EUC-JP;2361' \"%\"" | | |
\ elseif &fenc=='iso-2022-jp' | | |
\ exec "silent !xattr -w com.apple.TextEncoding 'ISO-2022-JP;2080' \"%\"" | | |
\ elseif &fenc=='cp932' | | |
\ exec "silent !xattr -w com.apple.TextEncoding 'SHIFT_JIS;2561' \"%\"" | | |
\ endif | |
endif | |
if has('win32') | |
"フォント設定 | |
set guifont=MS_Gothic:h9:cSHIFTJIS | |
"パスのセパレータを変更(\->/) | |
set shellslash | |
"ウインドウポジション、サイズの設定 | |
winpos 9 6 | |
set lines=73 | |
set columns=110 | |
"スペースの入ったファイル名も扱えるようにする | |
set isfname+=32 | |
"ファイル保存ダイアログの初期ディレクトリをバッファのあるディレクトリにする | |
set browsedir=buffer | |
"IME入力状態を規定にする(skkを使っているとき用) | |
set iminsert=2 | |
set imsearch=0 | |
"起動時デスクトップに移動 | |
if isdirectory( $HOME . "/Desktop" ) | |
cd $HOME/Desktop | |
elseif isdirectory( $HOME . "/デスクトップ" ) | |
cd $HOME/デスクトップ | |
endif | |
endif | |
"}}} | |
"{{{ MENU | |
"SSHを通してファイルオープン、GUIじゃない時でもMeta-m -> <TAB>でメニューを呼び出せる | |
"どうやるか覚えられない操作を置いとけば呼び出せる | |
menu User.Open.SCP.NonSprit :e! scp:///<LEFT> | |
menu User.Open.SCP.VSprit :vsp<CR>:wincmd w<CR>:e! scp:///<LEFT> | |
menu User.Open.SCP.Sprit :sp<CR>:wincmd w<CR>:e! scp:///<LEFT> | |
"分割してファイルブラウザを起動 | |
menu User.Open.Explolr.NonSprit :vsp<CR>:wincmd w<CR>:e! ./<CR> | |
menu User.Open.Explolr.VSprit :vsp<CR>:wincmd w<CR>:e! ./<CR> | |
menu User.Open.Explolr.Sprit :sp<CR>:wincmd w<CR>:e! ./<CR> | |
"各種VIMの記録情報を表示する | |
menu User.Buffur.RegisterList :dis<CR> | |
menu User.Buffur.BuffurList :ls<CR> | |
menu User.Buffur.HistoryList :his<CR> | |
menu User.Buffur.MarkList :marks<CR> | |
menu User.Buffur.JumpList :jumps<CR> | |
menu User.Buffur.ArgList :args<CR> | |
"エンコードを指定して再読み込み | |
menu User.Encode.reload.UTF :e ++enc=utf-8<CR> | |
menu User.Encode.reload.SJIS :e ++enc=cp932<CR> | |
menu User.Encode.reload.EUC :e ++enc=euc-jp<CR> | |
menu User.Encode.reload.ISO :e ++enc=iso-2022-jp<CR> | |
"保存エンコードを指定 | |
menu User.Encode.convert.UTF :set fenc=utf-8<CR> | |
menu User.Encode.convert.SJIS :set fenc=cp932<CR> | |
menu User.Encode.convert.EUC :set fenc=euc-jp<CR> | |
menu User.Encode.convert.ISO :set fenc=iso-2022-jp<CR> | |
"フォーマットを指定して再読み込み | |
menu User.Format.Unix :e ++ff=unix<CR> | |
menu User.Format.Dos :e ++ff=dos<CR> | |
menu User.Format.Mac :e ++ff=mac<CR> | |
"行番号をファイルに挿入 | |
menu User.Global.No :%!awk '{print NR, $0}'<CR> | |
"TABをSPACEに置き換える | |
menu User.Global.Space :set expandtab<CR>:retab<CR> | |
"空白行を削除する | |
menu User.Global.Delete :g/^$/d<CR> | |
"カーソル上の単語を全体から検索し、別ウインドウで表示 | |
menu User.Cursor.Serch.Show [I | |
menu User.Cursor.Serch.Top [i | |
menu User.Cursor.Serch.Junp [<tab> | |
"カーソル上のファイルのオープン | |
menu User.Cursor.FileOpen gf | |
"コピー、ペーストモード | |
menu User.Cursor.Paste :call Indent()<CR> | |
"全体置き換えモード | |
menu User.Cursor.Replace :%s/ | |
"C-C,C-Rと同様 | |
menu User.Cursor.Delete yw:%v:<C-R>0 | |
"CUI時にメニューを<M-m>で表示する | |
set wildcharm=<TAB> | |
nmap <M-m> :emenu <TAB> | |
"ワイルドメニューを使う | |
set wildmenu | |
set wildmode=longest,list,full | |
"}}} | |
"{{{その他 | |
"ノーマルと挿入モードでカーソルの形を変化させる | |
if exists('$TMUX') | |
let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\" | |
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\" | |
else | |
let &t_SI = "\<Esc>]50;CursorShape=1\x7" | |
let &t_EI = "\<Esc>]50;CursorShape=0\x7" | |
endif | |
"vimrcを保存時に即時reload | |
autocmd BufWritePost $MYVIMRC source $MYVIMRC | |
"vimを開いたときカーソル位置を復元 | |
silent! source $VIMRUNTIME/defaults.vim | |
"RedHat系デフォルトの/etc/vimrcのカーソル復元は無効化 | |
augroup redhat | |
autocmd! | |
augroup end | |
"HEXエディタとしてvimを使う | |
if has('unix') | |
augroup Binary | |
au! | |
au BufReadPre *.bin let &bin=1 | |
au BufReadPost *.bin if &bin | silent %!xxd -g 1 | |
au BufReadPost *.bin set ft=xxd | endif | |
au BufWritePre *.bin if &bin | %!xxd -r | |
au BufWritePre *.bin endif | |
au BufWritePost *.bin if &bin | silent %!xxd -g 1 | |
au BufWritePost *.bin set nomod | endif | |
augroup END | |
endif | |
"<C-c>,<C-v>でターミナルからコピーできる表示形式にし、さらにペーストも受け付ける | |
if has('unix') | |
function Indent_switch() | |
if &nu =='1' | |
set clipboard-=unnamed | |
set noai | |
set nolist | |
set nonu | |
set paste | |
set nocursorline | |
else | |
set clipboard+=unnamed | |
set ai | |
set list | |
set nu | |
set nopaste | |
set cursorline | |
endif | |
endfunction | |
nmap <C-C><C-V> :call Indent_switch()<CR> | |
endif | |
"<Leader>nnトグルで絶対行に表示切り替え | |
if has('unix') | |
function Relnum_switch() | |
if &relativenumber =='1' | |
set norelativenumber | |
else | |
set relativenumber | |
endif | |
endfunction | |
nmap <Leader>nn :call Relnum_switch()<CR> | |
endif | |
"挿入モードで",date",',time'で日付、時刻挿入 | |
inoremap <Leader>date <C-R>=strftime('%Y/%m/%d (%a)')<CR> | |
inoremap <Leader>time <C-R>=strftime('%H:%M')<CR> | |
"sudoを忘れて権限のないファイルを編集した時<Leader>sudoで保存 | |
nmap <Leader>sudo :w !sudo tee %<CR> | |
"<C-c><C-d>で現在のバッファと保存前のファイルをdiffする | |
nmap <C-C><C-D> :w !diff -u % -<CR> | |
"<C-c><C-g>で現在のファイルをgit diffする、Pluginが何も入ってない環境で使用 | |
nmap <C-C><C-G> :!git diff -- %<CR> | |
"<C-c><C-d>でvimdiffを使用して現在のバッファと元ファイルを比較する | |
command DiffOrigcmp rightb vnew | set bt=nofile | r # | -1d_ | diffthis | wincmd p | diffthis | |
nmap <C-C>d :DiffOrig<CR> | |
"無名buffer同士の差分を取る | |
command Clone rightb vnew | put =getbufline('#',1,'$') | 1d_ | |
command CloneDiff rightb vnew | put =getbufline('#',1,'$') | 1d_ | windo diffthis | wincmd w | |
nmap <C-C><C-B> :CloneDiff<CR> | |
"diffmodeでS-Up/Downで差分ジャンプ | |
if &diff | |
nmap <s-UP> [c | |
nmap <s-DOWN> ]c | |
endif | |
" selfupdate | |
command Selfupdate :!curl -o ~/.vimrc -L https://gist.github.com/kotashiratsuka/eac44d7e569f3721be5a12b8c221cab6/raw/.vimrc | |
"この.vimrcのTipsを表示する | |
command Tips :vsp! +set\ nofoldenable|1000 $MYVIMRC | |
"if has('unix') | |
" "CVSのコミットはSJISで行う | |
" autocmd BufRead /tmp/cvs* :set fileencoding=cp932 | |
" "Muttから開いた編集はiso-2022-jpで行う | |
" autocmd BufRead ~/.mutt/tmp/* :set fileencoding=utf-8 | |
" "w3mのフォームは改行コードdosで編集 | |
" autocmd BufRead ~/.w3m/w3mtmp* :set fileformat=dos | |
" "どのような言語でもペースト時自動インデントしない | |
" "autocmd BufRead * :set paste | |
"endif | |
"}}} | |
"{{{ Plugin | |
"Plug デフォルトでは動かさない | |
"install は | |
"!curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim | |
"source % | :PlugInstall | |
if filereadable($HOME . '/.vim/autoload/plug.vim') | |
call plug#begin('~/.vim/plugged') | |
Plug 'sheerun/vim-polyglot' | |
"Plug 'tpope/vim-fugitive' | |
"Visual block mode時に$で問題有り | |
"Plug 'gregsexton/gitv' | |
Plug 'mhinz/vim-signify' | |
"Plug 'alpaca-tc/alpaca_powertabline' | |
"Plug 'Lokaltog/powerline' | |
"Plug 'vim-scripts/L9' | Plug 'vim-scripts/FuzzyFinder' | |
Plug 'vim-airline/vim-airline' | Plug 'vim-airline/vim-airline-themes' | Plug 'edkolev/promptline.vim' | |
"Plug 'itchyny/lightline.vim' | |
if exists('$TMUX') | |
Plug 'edkolev/tmuxline.vim' | |
endif | |
Plug 'tpope/vim-rails' , { 'for': 'ruby' } | |
Plug 'pangloss/vim-javascript' , { 'for': 'javascript' } | |
Plug 'vim-jp/vimdoc-ja' | |
"Plug 'tsaleh/vim-align' | |
"Plug 'h1mesuke/vim-alignta' | |
Plug 'junegunn/vim-easy-align' | |
Plug 'tyru/skk.vim', { 'do': 'curl --create-dirs -o ~/.vim/skk/SKK-JISYO.L http://openlab.jp/skk/skk/dic/SKK-JISYO.L' } | |
"Plug 'tyru/eskk.vim', { 'do': 'curl --create-dirs -o ~/.vim/skk/SKK-JISYO.L http://openlab.jp/skk/skk/dic/SKK-JISYO.L' } | |
"Plug 'vim-scripts/DrawIt' | |
Plug 'flazz/vim-colorschemes' | |
"Plug 'rafi/awesome-vim-colorschemes' | |
"Plug 'vim-scripts/guicolorscheme.vim' | |
Plug 'godlygeek/csapprox' | |
"Plug 'othree/eregex.vim' | |
"Plug 'nathanaelkane/vim-indent-guides' | |
"Plug 'vim-scripts/diffchar.vim' | |
Plug 'editorconfig/editorconfig-vim' | |
Plug 'mattn/emmet-vim', { 'for': 'html' } | |
Plug 'vim-scripts/closetag.vim', { 'for': [ 'html' , 'xml' ] } | |
Plug 'tpope/vim-repeat' | Plug 'tpope/vim-surround' | |
"Plug 'vim-scripts/YankRing.vim' | |
Plug 'junegunn/fzf.vim' | Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } | |
"Plug 'yuki-yano/fzf-preview.vim', { 'branch': 'release/rpc' } | |
"Plug 'easymotion/vim-easymotion' | |
Plug 'mg979/vim-visual-multi' | |
"Plug 'terryma/vim-multiple-cursors' | |
Plug 'tpope/vim-abolish' | |
"Plug 'timakro/vim-searchant' | |
"Plug 'airblade/vim-gitgutter' | |
Plug 'Yggdroot/indentLine' | |
Plug 'shinchu/hz_ja.vim' | |
Plug 'ryanoasis/vim-devicons' | |
Plug 'kana/vim-operator-user' | Plug 'kana/vim-operator-replace' | |
Plug 'rhysd/clever-f.vim' | |
Plug 'RRethy/vim-illuminate' | |
"Plug 'vim-scripts/CmdlineComplete' | |
Plug 'mattn/vim-gist', { 'on': 'Gist' } | Plug 'mattn/webapi-vim' | |
call plug#end() | |
endif | |
"eskk.vim | |
if &runtimepath =~ 'eskk.vim' && has('unix') | |
let g:eskk#egg_like_newline=1 | |
let g:eskk#directory = "~/vim/skk" | |
let g:eskk#dictionary = { 'path': "~/.vim/skk/.skk-jisyo" } | |
let g:eskk#large_dictionary = { 'path': "~/.vim/skk/SKK-JISYO.L" } | |
let g:eskk#auto_save_dictionary_at_exit = 1 | |
endif | |
"skk.vim | |
if &runtimepath =~ 'skk.vim' && has('unix') | |
let g:skk_egg_like_newline=1 | |
let g:skk_jisyo = "~/.vim/skk/.skk-jisyo" | |
let g:skk_large_jisyo = "~/.vim/skk/SKK-JISYO.L" | |
let g:skk_auto_save_jisyo = 1 | |
endif | |
"Fuf系 | |
"http://vim.g.hatena.ne.jp/keyword/fuzzyfinder.vim | |
if &runtimepath =~ 'FuzzyFinder' | |
let g:fuf_modesDisable = ['mrucmd'] | |
nmap fb :FufBuffer<CR> | |
nmap fF :FufFile<CR> | |
nmap ff :FufMruFile<CR> | |
nmap fl :FufChangeList<CR> | |
endif | |
"indentLine | |
if &runtimepath =~ 'indentLine' | |
let g:indentLine_char = '⎸' | |
endif | |
"operator-replace | |
if &runtimepath =~ 'operator-replace' | |
nmap _ <Plug>(operator-replace) | |
endif | |
"http://haya14busa.com/mastering-vim-easymotion/ | |
"if &runtimepath =~ 'vim-easymotion' | |
" " ======================================= | |
" " Boost your productivity with EasyMotion | |
" " ======================================= | |
" " Disable default mappings | |
" " If you are true vimmer, you should explicitly map keys by yourself. | |
" " Do not rely on default bidings. | |
" let g:EasyMotion_do_mapping = 0 | |
" " Or map prefix key at least(Default: <Leader><Leader>) | |
" " map <Leader> <Plug>(easymotion-prefix) | |
" " ======================================= | |
" " Find Motions | |
" " ======================================= | |
" " Jump to anywhere you want by just `4` or `3` key strokes without thinking! | |
" " `s{char}{char}{target}` | |
" nmap s <Plug>(easymotion-s2) | |
" xmap s <Plug>(easymotion-s2) | |
" omap z <Plug>(easymotion-s2) | |
" " Of course, you can map to any key you want such as `<Space>` | |
" " map <Space>(easymotion-s2) | |
" " Turn on case sensitive feature | |
" let g:EasyMotion_smartcase = 1 | |
" " ===================================== | |
" " Line Motions | |
" " ======================================= | |
" " `JK` Motions: Extend line motions | |
" map <Leader>j <Plug>(easymotion-j) | |
" map <Leader>k <Plug>(easymotion-k) | |
" " keep cursor column with `JK` motions | |
" let g:EasyMotion_startofline = 0 | |
" " ======================================= | |
" " General Configuration | |
" " ======================================= | |
" let g:EasyMotion_keys = 'hjklasdfgyuiopqwertnmzxcvbHJKLASDFGYUIOPQWERTNMZXCVB' | |
" " Jump to first match with enter & space | |
" let g:EasyMotion_enter_jump_first = 1 | |
" let g:EasyMotion_space_jump_first = 1 | |
" " ======================================= | |
" " Search Motions | |
" " ======================================= | |
" " Extend search motions with vital-over command line interface | |
" " Incremental highlight of all the matches | |
" " Now, you don't need to repetitively press `n` or `N` with EasyMotion feature | |
" " `<Tab>` & `<S-Tab>` to scroll up/down a page with next match | |
" " :h easymotion-command-line | |
" nmap g/ <Plug>(easymotion-sn) | |
" xmap g/ <Plug>(easymotion-sn) | |
" omap g/ <Plug>(easymotion-tn) | |
"endif | |
"fzf | |
"https://github.com/junegunn/fzf.vim | |
if &runtimepath =~ 'fzf.vim' | |
let g:fzf_buffers_jump = 1 | |
let g:fzf_commits_log_options = '--no-show-signature --oneline --graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"' | |
nmap <Leader>fz :FZF<CR> | |
nmap <Leader>ff :Files<CR> | |
nmap <Leader>fb :Buffers<CR> | |
nmap <Leader>fl :Lines<CR> | |
nmap <Leader>fL :BLines<CR> | |
nmap <Leader>ff :History<CR> | |
nmap <Leader>fs :History/<CR> | |
nmap <Leader>gc :BCommits<CR> | |
nmap <Leader>gC :Commits<CR> | |
nmap <Leader>gf :GFiles<CR> | |
nmap <Leader>gF :GFiles?<CR> | |
nmap <Leader>fc :Commands<CR> | |
nmap <Leader>fm :Marks<CR> | |
nmap <Leader>fj :Jumps<CR> | |
nmap <Leader>fM :Map<CR> | |
nmap <Leader>fw :Windows<CR> | |
nmap <Leader>fr :Rg<SPACE> | |
nmap <Leader>fL :Locate<SPACE> | |
endif | |
"https://github.com/junegunn/vim-easy-align | |
if &runtimepath =~ 'vim-easy-align' | |
xmap ga <Plug>(EasyAlign) | |
nmap ga <Plug>(EasyAlign) | |
endif | |
"YankRing | |
"http://stackoverflow.com/questions/15010271/change-location-of-vim-yankring-history-file#15010272 | |
"if &runtimepath =~ 'YankRing.vim' | |
" let g:yankring_history_dir = $HOME.'/.vim' | |
"endif | |
"eregex | |
"http://blog.ruedap.com/2011/02/02/vim-ruby-regexp-plugin-eregex | |
if &runtimepath =~ 'eregex.vim' | |
let g:eregex_default_enable = 0 | |
nnoremap <Leader>/ :call eregex#toggle()<CR> | |
endif | |
"Gitv | |
"http://cohama.hateblo.jp/entry/20130517/1368806202 | |
"if &runtimepath =~ 'gitv' | |
"nmap ,g :Gitv --all<CR> | |
" autocmd FileType git :setlocal foldlevel=99 | |
" autocmd FileType gitv call s:my_gitv_settings() | |
" | |
" function! s:my_gitv_settings() | |
" setlocal iskeyword+=/,-,. | |
" nnoremap <silent><buffer> C :<C-u>Git checkout <C-r><C-w> | |
" nnoremap <buffer> <Space>di :<C-u>Git diff <C-r><C-w><CR> | |
" nnoremap <buffer> <Space>rb :<C-u>Git rebase <C-r><C-w> | |
" nnoremap <buffer> <Space>R :<C-u>Git revert <C-r><C-w> | |
" nnoremap <buffer> <Space>h :<C-u>Git cherry-pick <C-r><C-w> | |
" nnoremap <buffer> <Space>rh :<C-u>Git reset --hard <C-r><C-w> | |
" endfunction | |
" | |
"endif | |
" vim-airline | |
if &runtimepath =~ 'airline' | |
let g:airline#extensions#tabline#enabled = 1 | |
let g:airline#extensions#tabline#buffer_idx_mode = 1 | |
let g:airline_powerline_fonts = 1 | |
let g:airline#extensions#whitespace#trailing_regexp = '[^\\]\s$' | |
"airline使うならstatusline不要 | |
set statusline& | |
"skkの状態を表示 | |
if &runtimepath =~ 'skk.vim' && has('unix') | |
let g:airline_section_x=airline#section#create_right(['%{exists(''*SkkGetModeStr'')?SkkGetModeStr():''''} ','filetype']) | |
endif | |
if &runtimepath =~ 'eskk.vim' && has('unix') | |
let g:airline_section_x=airline#section#create_right(['%{exists(''*eskk#statusline'')?eskk#statusline():''''} ','filetype']) | |
endif | |
endif | |
"colorschme | |
if &runtimepath =~ 'awesome-vim-colorschemes' | |
"colorscheme abstract | |
"colorscheme ayu | |
"colorscheme deep-space | |
"colorscheme gotham256 | |
"colorscheme hybrid | |
"colorscheme lucius | |
"colorscheme molokai_dark | |
"colorscheme molokayo | |
"colorscheme onedark | |
"colorscheme wombat256 | |
elseif &runtimepath =~ 'vim-colorschemes' | |
colorscheme badwolf | |
"()[]などのハイライトが見難いので赤 | |
highlight MatchParen guifg=Cyan gui=bold | |
else | |
colorscheme pablo | |
endif | |
"vim-visual-multi | |
if &runtimepath =~ 'vim-visual-multi' | |
let g:VM_theme = 'iceblue' | |
let g:VM_mouse_mappings = 1 | |
let g:VM_maps = {} | |
let g:VM_maps["Exit"] = '<C-c>' | |
let g:VM_maps['Find Under'] = '<C-m>' | |
let g:VM_maps['Find Subword Under'] = '<C-m>' | |
endif | |
"vim-signify | |
if &runtimepath =~ 'vim-signify' | |
let g:signify_sign_add = '•' | |
let g:signify_sign_change = '•' | |
let g:signify_sign_delete = '•' | |
highlight SignifySignAdd ctermfg=green | |
highlight SignifySignDelete ctermfg=red | |
highlight SignifySignChange ctermfg=yellow | |
highlight SignColumn ctermbg=NONE cterm=NONE guibg=NONE gui=NONE | |
nmap <C-C><C-V> :call Indent_switch() \| call sy#toggle()<CR> | |
endif | |
"vim-indent-guides | |
if &runtimepath =~ 'vim-indent-guides' | |
let g:indent_guides_enable_on_vim_startup = 1 | |
hi IndentGuidesOdd ctermbg=black | |
hi IndentGuidesEven ctermbg=darkgrey | |
endif | |
"clever-f | |
if &runtimepath =~ 'clever-f' | |
let g:clever_f_across_no_line = 1 | |
let g:clever_f_use_migemo = 1 | |
let g:clever_f_smart_case = 1 | |
endif | |
"promptline | |
if &runtimepath =~ 'promptline.vim' | |
let g:promptline_theme = 'airline' | |
let g:promptline_preset = { | |
\'a' : [ promptline#slices#host() ], | |
\'b' : [ promptline#slices#user() ], | |
\'c' : [ promptline#slices#cwd() ], | |
\'x' : [ promptline#slices#git_status() ], | |
\'y' : [ '$(git rev-parse --short HEAD 2>/dev/null)'], | |
\'z' : [ promptline#slices#vcs_branch(), promptline#slices#jobs() ], | |
\'warn' : [ promptline#slices#last_exit_code() ]} | |
endif | |
"tmuxline | |
if &runtimepath =~ 'tmuxline.vim' | |
let g:airline#extensions#tmuxline#enabled = 0 | |
let g:tmuxline_preset = { | |
\ 'b': '#S', | |
\ 'a': '#(tmux list-sessions|wc -l|bc)', | |
\ 'win': ['#I', '#W'], | |
\ 'cwin': ['#I', '#W'], | |
\ 'x': '#{?client_prefix,,}#{?window_zoomed_flag,,}', | |
\ 'y': ['%H:%M','%Y-%m-%d'], | |
\ 'z': '#h', | |
\ 'options': { | |
\'status-justify': 'left' | |
\}, | |
\ 'win_options': { | |
\'window-status-activity-style': 'none', | |
\} | |
\} | |
endif | |
"}}} | |
"{{{ Tipsメモ | |
"新しい機能やどうしても覚えられないmapは基本的にmapするけど、ある程度使い込んだ場合やまるで使わなかったもの、 | |
"たまにしか使わなくて覚えられないもの、逆に覚え込んで身についたものはこのtipsに送られる | |
"無名バッファの復元、無名で編集していて間違って閉じた場合に使用 | |
":recover | |
"バッファ切り替え | |
"C-^ | |
"開いてるバッファー全てにコマンド実行 | |
"bufferdo %s/bbb/bbb/g|wa | |
"バッファ全体に置き替えを適用 | |
":bufdo %s/bbb/bbb/g | |
"バッファ全部保存 | |
"wa | |
"保存して全て(バッファー引数)終了 | |
"xa! | |
"保存せずに全て(バッファー引数)終了 | |
"qa! | |
"引数リスト全体に置き替えを適用して保存して終了 | |
":argdo %s/bbb/bbb/g|xa | |
"http://www.ac.cyberhome.ne.jp/~yakahaira/vimdoc/windows.html | |
"水平、縦分割 | |
"<C-W>s <C-W>v | |
"分割ウインドウ移動 | |
"C-W,C-W | |
"分割ウインドウカーソル移動 | |
"C-W,hjkl | |
"分割ウインドウ自体移動 | |
"C-W,HJKL | |
"いま開いている分割ウインドウを閉じる | |
"C-W,C-c | |
"いま開いている分割ウインドウ以外を閉じる | |
"C-W,C-o | |
"ウインドウを入れ替える" | |
"C-W,x | |
"ウインドウサイズ調整 | |
"C-W,+ -= C-W,- C-W,= | |
"ウインドウサイズ幅高さ最大 | |
"C-W_ C-W| | |
"タブ移動 | |
"gt gT 2gt | |
"カーソルを一個前、先のジャンプリストに移動 | |
"<C-o> <C-i> | |
"カーソル下のファイル名を開く | |
"gf | |
"カーソル下のファイル名を開く、:Lが指定されていればそこにジャンプ | |
"gF | |
"カーソル下のファイル名をタブで開く | |
"C-w,gf | |
"現在検索している単語をペースト | |
"<C-R>/ | |
"インデントやら何やら無視してそのままペースト | |
":a! <Paste> | |
"カレントバッファの内容をshなどで実行 | |
"w !sh | |
"検索履歴を参照 | |
":<C-F> | |
"or | |
"逆から | |
":? | |
"履歴を送る | |
"C-C | |
"コマンド履歴を参照 | |
"q: | |
"逆から | |
"q? | |
"レジスタの中身をコマンドラインへペースト | |
":<C-R>" | |
":<C-R>0 | |
":<C-R><C-W> | |
"レジスタリスト | |
"0 最後に yank したテキスト | |
"- 最後の細かい削除 | |
". 最後に挿入したテキスト | |
"% 現在のファイル名 | |
"# 代替ファイル名 | |
"/ 最後に検索した文字列 | |
": 最後に実行した: | |
"_ ブラックホール | |
"= 計算式 | |
"* マウスで選択されたテキスト | |
"指定エンコードで開きなおす | |
":e ++enc=euc-jp | |
":e ++ff=unix | |
"インサートモードでインデントする | |
"<C-T> or <C-D> | |
"インサートモードで上下の行を現在行へコピーして入力 | |
"<C-E> or <C-Y> | |
"uniqやgrepでフィルタ | |
":%!uniq | |
":%!grep | |
":eで開くパスの追加 | |
"let &path += "/etc,/var/log,/var/log/httpd" | |
"Bookmark | |
"https://nanasi.jp/articles/vim/bookmarks_vim.html | |
"b | |
"B | |
"q | |
"DrawItPlugin.vim | |
"\di to start DrawIt and | |
"\ds to stop DrawIt. | |
"EnhCommentify.vim | |
"\xでコメントアウト/解除 | |
" | |
"VisualMode再選択 | |
"gv | |
"カーソル上の単語を全体からリストアップ | |
"[I | |
"大文字<->小文字変換 | |
"~ | |
"gu<select> | |
"gU<select> | |
" | |
"カーソルを画面の上、中、下に移動 | |
"H,M,L | |
"1ラインスクロール | |
"CTRL-Y CTRL-T | |
"ウィンドウの先頭から数えて[count]行目から再描画 | |
"z | |
"現在行をウィンドウの最上位置にして再描画(位置変化無) | |
"zt | |
"ウィンドウの高さを{height}にして再描画 | |
"z{height}<CR> | |
"現在位置を最上にしてウィンドウを再描画(カーソル現在位置) | |
"z<CR> | |
"現在位置を中心にしてウィンドウを再描画(カーソル最左非空白へ) | |
"z. | |
"現在位置を中心にしてウィンドウを再描画(カーソル現在位置) | |
"zz | |
"現在位置を最下にしてウィンドウを再描画(カーソル最左非空白へ) | |
"z- | |
"現在位置を最下にしてウィンドウを再描画(カーソル現在位置) | |
"zb | |
"wrap off時: [count]文字左にスクロール | |
"z<right> | |
"z<right>" と同じ | |
"zl | |
"wrap off時: [count]文字右にスクロール | |
"z<Left> | |
"z<Left>" と同じ | |
"zh | |
"現在行の検索 | |
"f<word> | |
"現在行の検索(後方) | |
"F<word> | |
"現在行のワード検索 | |
"f<word> | |
"現在行の検索(後方) | |
"F<word> | |
"現在行の次検索 | |
", | |
"検索、置き換え簡単方法 | |
"置き換えたいワードの上にカーソル移動->'*'->cw->入力->n->.->n->.->繰り返し | |
"コントロールコードの入力 | |
"C-V<TAB> | |
"計算結果の入力 | |
"Insterモード->C-R=->2*2*2->Return | |
"EXモードの基本形 | |
":q | |
"で選んで編集してEnter | |
"キャンセルは<ESC< | |
" | |
"直前操作繰り返しをコマンドラインから範囲指定で行う | |
":.,10 normal . | |
"コマンド内容をinsertする | |
":normal iecho test | |
"逆にレジスタに入れてコマンドに貼り付ける | |
"y$:"* | |
"コマンドラインでバッファ番号を指定する | |
"#バッファ番号 | |
"コマンドライン操作 | |
"http://www.kaoriya.net/vimdoc_j/cmdline.txt | |
"C-R.... | |
" | |
"名前のない登録、最後の削除やヤンクを含む。 | |
"'"' | |
"カレントファイル名 | |
"'%' | |
"代替ファイル名 | |
"'#' | |
"最後の検索パターン | |
"'/' | |
"クリップボードの内容 | |
"'*' | |
"最後のコマンドライン | |
"':' | |
"最後の小さな削除(行単位未満) | |
"'-' | |
"最後に挿入されたテキスト | |
"'.' | |
"式の登録: 式を入力するよう要求される | |
"'=' | |
"ファイル名補完 | |
"CTRL-X CTRL-F | |
"行全補完 | |
"CTRL-X CTRL-L | |
"マクロ定義 (インクルードファイルの中も探す) | |
"CTRL-X CTRL-D | |
"カレントファイルとインクルードファイ補完 | |
"CTRL-X CTRL-I | |
"辞書補完 | |
"CTRL-X CTRL-K | |
"同義語辞書 (シソーラス) | |
"CTRL-X CTRL-T | |
"タ補完 | |
"CTRL-X CTRL-] | |
"Vim のコマンドライ補完 | |
"CTRL-X CTRL-V | |
""検索文字列補完 | |
"https://vim.blue/search-complete/ | |
"CTRL-R CTRL-F カーソル下のファイル名 | |
"CTRL-R CTRL-P gf と同様に 'path' を使って展開された、カーソル下のファイル名 | |
"CTRL-R CTRL-W カーソル下の word | |
"CTRL-R CTRL-A カーソル下の WORD; WORD を参照 | |
"CTRL-R CTRL-L カーソル下の行 | |
"Window縦分割/横分割切替 | |
"C-W,H | |
"C-W,J | |
"暗号化する解除する | |
":X | |
"空白を挿入しないでjoinする | |
"gJ | |
"最初の検索パターンが現れたところからもう一段検索する | |
"http://www.kaoriya.net/vimdoc_j/pattern.txt | |
":/patarn1/;/patarn2 | |
"カーソル位置の単語をManpageで検索 | |
"K | |
"カーソル位置の情報を詳細にステータスバーへ表示 | |
"g,C-G | |
"Fold関係 | |
"foldenable をトグルで on off する | |
"zi | |
"fold を閉じる、開く | |
"zo zc | |
"fold を再帰的に開く、閉じる | |
"zO zC | |
"折りたたみ間の移動 | |
"z] z[ | |
"1つ上下の折りたたみに移動 | |
"zj zk | |
"foldlevel をインクリメント、 すなわちすべてのfoldを1level開く | |
"zr | |
"foldlevel を最大値にする、すなわちすべてのfoldを開く | |
"zR | |
"foldlevel をデクリメント、すなわちすべてのfoldを1level閉じる | |
"zm | |
"foldlevel を0にする、すなわちすべてのfoldを閉じる | |
"zM | |
"fold をカーソルから4行分設定する | |
"zf4j | |
"fold をカーソルからaのマーク位置まで設定する | |
"zf`a | |
"設定された fold を削除 | |
"zd | |
"設定された fold を再帰的に削除 | |
"zD | |
"全てのfoldを削除 | |
"zE | |
"全文をソート | |
":%!sort [u] | |
"改行位置で整形 | |
"gq | |
"sudoを忘れて権限のないファイルを編集した時 | |
":w !sudo tee % | |
"置換 | |
"Massachusetts の上で # を押して、 :%s//New York/g とかやると New York に置換 | |
":%s//New York/g とかやると New York に置換 | |
":%g//dすれば Massachusetts を含む行を削除 | |
"%v//dすれば Massachusetts を含む行だけ残すことができる。 | |
"sで置換してその後他の行に適用 | |
":%s//New York/g したあと、&で繰り返し | |
"& | |
":%s//New York/g したあと、g&で全体に適用 | |
"g& | |
"cssの{}の内側をsort | |
":g/{\n/+1,/}/-1 sort | |
"http://などをエスケープしないで検索 | |
"/\vhttp://.* | |
"/\Vhttp:// | |
"グループを使用せず正規表現のマッチする範囲を指定 | |
"http://tanihiro.hatenablog.com/entry/2016/06/01/211806 | |
"%s/<div.*>\zs.\+\ze<\/div>/REPLACE/ | |
"検索した後終端にカーソルを配置 | |
"http://tanihiro.hatenablog.com/entry/2016/06/01/211806 | |
"/WORD/e | |
"改行も含めたメタ文字置換 | |
"s/\_s | |
"Undo関連 | |
"undolist Undo履歴を参照 | |
"g- 古いテキストの状態戻る | |
"g+ 新しいテキストの状態に戻る | |
":earlier {N}s {N}秒前の状態に戻ります | |
":earlier {N}m {N}分前の状態に戻ります | |
":earlier {N}h {N}時間前の状態に戻ります | |
":later {N}s {N}秒後の状態に戻ります | |
":later {N}m {N}分後の状態に戻ります | |
":later {N}h {N}時間後の状態に戻ります | |
"persistent_undoが設定されていない時にUndoをファイルに落とす | |
":wundo <undofile> | |
"それを読み込む | |
";rundo <undofile> | |
"surround系 | |
"http://blog.scimpr.com/2012/09/08/surround-vimチュートリアルをためす/ | |
"Change Surroucol("$")nd | |
"cs"' | |
"Change Surround x to Tag | |
"cs'<q> | |
"Change Surround Tag to x | |
"cst" | |
"Delete Surround | |
"ds" | |
"You Surround x | |
"ysiw] | |
"空白つきのカッコで囲む | |
"cs]{ | |
"行全体を囲む | |
"yss) | |
"削除する | |
"ds{ds) | |
"You Surround x with Tag | |
"ysiw<pre> | |
"vim-easy-align | |
"https://github.com/junegunn/vim-easy-align | |
"texile table | |
"gaip*| | |
"Live | |
"gaip<C-P>*|<CR><CR>......| | |
"Mergin | |
"gaip<C-P>*|<C-R> or <C-L>| | |
"vim-gist | |
"https://github.com/mattn/vim-gist | |
"Token https://github.com/settings/tokens -> allow gist | |
"echo token <token > .gist-vim | |
"git config --global github.user 'kotashiratsuka' | |
"Create a private gist. | |
":Gist -P | |
"Create a public gist. | |
":Gist -P | |
"list user gist | |
":Gist -l kotashiratsuka | |
"Update Gist | |
":Gist -l kotashiratsuka > choise -> edit -> ZZ | |
"or | |
":Gist -e eac44d7e569f3721be5a12b8c221cab6 -> ZZ | |
"Vimでヤンクした内容を複数行にペーストする | |
"Ctrl+v -> } -> I Ctrl+r -> " -> ESC | |
"https://nanasi.jp/articles/howto/file/expand.html | |
"拡張子を変更して保存 | |
":w %<.bak | |
"一つ上のディレクトリに.bakで保存 | |
":w ../%:t.bak | |
"今開いてファイルパスにcd | |
":cd %:h | |
"mkdirし忘れてファイル作りたい時 | |
":mkdir -p %:h | |
"カレントディレクトリ以下でファイル名を検索して開く | |
":find <filename> | |
"http://nanasi.jp/articles/vim/hz_ja_vim.html | |
"vmode 入力 実行される変換 | |
"gHL 可能な文字を全て半角に変換する | |
"gZL 可能な文字を全て全角に変換する | |
"gHA ASCII文字を全て半角に変換する | |
"gHH ASCII文字を全て半角に変換する | |
"gZA ASCII文字を全て全角に変換する | |
"gHM 記号を全て半角に変換する | |
"gZM 記号を全て全角に変換する | |
"gHW 英数字を全て半角に変換する | |
"gZW 英数字を全て全角に変換する | |
"gHJ カタカナを全て半角に変換する | |
"gZJ カタカナを全て全角に変換する | |
"gZZ カタカナを全て全角に変換する | |
"comman "{target}実行される変換 | |
"han_all 全ての全角文字→半角 | |
"han_ascii 全角アスキー→半角 | |
"han_kana 全角カタカナ→半角 | |
"han_eisu 全角英数→半角 | |
"han_kigou 全角記号→半角 | |
"zen_all 全ての半角文字→全角 | |
"zen_ascii 半角アスキー→全角 | |
"zen_kana 半角カタカナ→全角 | |
"zen_eisu 半角英数→全角 | |
"zena paragraph_kigou 半角記号→全角 | |
"変更した箇所にジャンプ | |
"g; g, | |
"モーション系でよく使うの | |
"https://vim-jp.org/vimdoc-ja/motion.html | |
"delete a paragraph | |
"dap | |
"visual select inner paragraph | |
"vip | |
"ynk inner sentence | |
"yis | |
"c/text/<Enter> | |
"vim-visual-multi | |
"https://github.com/mg979/vim-visual-multi/wiki | |
"Ctrl-Clickでカーソル作成してあとは好きに | |
"\\\ -> 矢印キー -> \\\ -> 矢印 -> でもok | |
"実はかなり高度な機能もあるが覚えきれない | |
"モードが拡張モードとカーソルモードの2つあり、モードに入った状態ではそれをTABでトグルできる | |
"S-UP/Downでカーソル作るもしくはV選択状態で\\cでカーソル作れる、もしくは<C-d<で拡張Vモード移行、もしくは\\aで拡張Vモード選択状態に移行できる | |
"SHIFT-矢印でもモード移行する | |
"カーソルの=とか"で揃える方法 | |
""の場合、f" -> \\a で整列 | |
""と=の2つで整列したい場合、2\\<"=で整列 2を3にすると3キャラ考慮で整列 | |
"選択された部分を検索して置き換えset inccommand=split | |
"_を-にする場合は R -> _ -> - | |
"もしくは、Vモードで選択 -> TABで拡張モード -> \\cカーソル作成 -> -> sEとか -> Rで置き換え -> _ -> Enter -> - Enter | |
"\\Rで行おき、もう1回\\Rで3行おきもう1回... | |
"拡張モードで\\fでフィルタ、\\sで正規表現でフィルタ、\\`でメニュー | |
"非ASCII文字を検索 | |
"https://qastack.jp/programming/16987362/how-to-get-vim-to-highlight-non-ascii-characters | |
"/[^\d0-\d127] | |
"[^\x00-\x7F] | |
"複数のサーバーの設定ファイルを見比べて編集する | |
"vi -d -O scp://www{1..3}///etc/apache24/httpd.conf -c ':diffthis' | |
"コマンドモードの内部コマンドの出力をaレジスタへリダイレクトする | |
":redir @a | |
":silent map | |
":redir END" | |
""vim-abolish.vim | |
":%s/facilities/buildings/g | |
":%s/Facilities/Buildings/g | |
":%s/FACILITIES/BUILDINGS/g | |
"としなければいけないのを | |
":%S/facilit{y,ies}/building{,s}/g | |
"で一発 | |
" | |
"snake_case (crs) | |
"MixedCase (crm) | |
"camelCase (crc) | |
"snake_case (crs) | |
"UPPER_CASE (cru) | |
"dash-case (cr-) | |
"dot.case (cr.) | |
"space case (cr<space>) | |
"and Title Case (crt) | |
"forced-motionを使ったコメントインアウト | |
"c c-V}#<ESC>p | |
"でカーソル行、位置から一段落コメントアウト、}はapやipでも好きなやつ | |
"d<c-v>ipでコメントイン | |
"c-v apやipのほうがいいかも | |
"c c-v ap #<ESC>p | |
"コメントアウトは素直にビジュアル使ったほうがundoが一段だからいいかも | |
"vip <c-v>I#<ESC> | |
"が、コメントインはforced-motionのほうが速い | |
"d<c-v>ip< | |
"}}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment