vim(neovim)アレコレ

2018-09-27

vim, neovim, regex

vimメモ
「こいつぁ…」ってなったら書き足していきます。
「邪魔だな…」って思ったら消すこともあります。

キーマップ

コピペで貼っつけた「この一単語だけ」〇〇ケースから☓☓ケースに変えたい!
neovimならinit.vimに、vimだと.vimrcかな?(未確認)

1
2
3
4
5
6
7
8
9
10
11
12
"キャメルケースをスネークケース
nnoremap <C-c><C-s> ma<C-v>iw:s/\%V\([A-Z]\)/_\l\1/g<CR>`a
"キャメルケースをパスカルケース
nnoremap <C-c><C-p> ma<C-v>iw:s/\%V\([a-z]\)/\u\1/<CR>`a
"スネークケースをキャメルケース
nnoremap <C-s><C-c> ma<C-v>iw:s/\%V_\([a-z]\)/\u\1/g<CR>`a
"スネークケースをパスカルケース
nnoremap <C-s><C-p> ma <C-v>iw:s/\%V\([a-z]\)/\u\1/<CR>`a <C-v>iw:s/\%V_\([a-z]\)/\u\1/g<CR>`a
"パスカルケースをキャメルケース
nnoremap <C-p><C-c> ma<C-v>iw:s/\%V\([A-Z]\)/\l\1/<CR>`a
"パスカルケースをスネークケース
nnoremap <C-p><C-s> ma<C-v>iw:s/\%V\([A-Z]\)/\l\1/<CR>`a <C-v>iw:s/\%V\([A-Z]\)/_\l\1/g<CR>`a

例えば
キャメルケースにカーソル置いて<Ctrl + C> -> <Ctrl + s>すればそこだけスネークケースに
まとめて変えたいときは普通に置換したほうが早いので* -> ://snake_case/gでしょうか

マクロ(クエリ?)

  • コマンドモードで q1 した後、なんか操作するとその内容を記録する
    1は他の数字や文字でも良い

  • コマンドモードで q

  • コマンドモードで @1 (qa で記録したときは @a )
    100@1 で 100回繰り返す

文字コード変更

コマンドモードで :e ++enc=shift_jis

文字コード指定して入力

  1. 入力モードで ctrl + v

  2. モード(n進数)を選択

  3. 入力

モード n進数 桁数 備考
o 8 3 Oでも可 (000 ~ 377)
x 16 2 Xでも可 (00 ~ ff)
u 16 4 (0000 ~ ffff)
U 16 8 (00000000 ~ 7fffffff)
10 3 (000 ~ 255)

thanks

サスペンド

コマンドモードで ctrl+z

shellコンソールで fg

カーソル操作

key
f 探したい文字を入力すると、その文字の位置まで移動
w 次の単語の先頭に移動
b 単語の先頭、または前の単語にカーソル移動
e 単語の終端文字に移動

文字を云々

調べたい文字にカーソルを当てて ga

コマンドモードで /検索したい文字列

charcodeで検索したければ \%u をつける
半角スペースなら /\%u20

JSON形式の文字のインデントを整えてくれる
!% jq

jqが入ってないとダメ。なければ brew install jq
brewのインストールはググる

ファイル全体で置換
:%s/検索文字列/置換文字列/オプション
ファイル内の半角スペースを全部削除したければ :%s/\%u20//g
普通に :%s/ //g でもいい
※gオプションいらなさそう

(行)範囲を指定して置換
:10,20s/foo/bar/

確認しながら置換
:%s/検索文字列/置換文字列/gc とすると都度xxx に置換しますか? (y/n/a/q/l/^E/^Y)と聞いてくるので

key
y 置換して次の単語へ移動
n 置換しないで次の単語へ移動
a 現在の単語を含みすべて置換
q 置換しないで終了
ESC 置換しないで終了
l 置換して終了
Ctrl+e 下に一行スクロール
Ctrl+y 上に一行スクロール

現在の行で置換
:s/foo/bar/

foo/bar/foo

今選択している範囲だけで置換
\%V キモはコレ!

例えば foo_bar_foo の最後の foo だけ Foo にしたければ
最後のfooをVisualモードで選択して :s/\%Vf/F/ とする。
キャメルケースからパスカルケースへの変換キーマップなどで使ってます

正規表現

\{-}

マッチした文字セットを変数に代入するのは \(.\{-}\)
...囲うカッコにエスケープが必要

変数は\1,\2... と順番に\nに代入される

最初のタブで2つに区切って前後を入れ替えたければ

:%s/^\(.\{-}\)\t\(.*\)/\2\t\1/g こんな感じ

\{n,}

\{n}

\_.

例えば以下のdivブロックにマッチさせたければ /<div>\_.\{-}<\/div>

1
2
3
4
5
6
7
<div>
  <p>hoge</p>
</div>

<div>
  <p>fuga</p>
</div>

コメント

投稿する

投稿したコメントはご自身で削除できません

不適切なコメントと判断した場合は管理側で削除することがあります