今までzshのvicmdモードではdw
、cw
のような単純なtext-object操作は実現されていましたが、
以下のコミットで新しい動作を実現するウィジェットが追加されたようなので使ってみました。
https://github.com/zsh-users/zsh/commit/d257f0143e69c3724466c4c92f59538d2f3fffd1
zshrcの設定はzshのコード内に書いてあったものをそのまま使っています。
select-bracketed
()
、[]
、{}
、<>
の中の文字列をテキストオブジェクトとして扱う
zshrc
autoload -U select-bracketed
zle -N select-bracketed
for m in visual viopp; do
for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do
bindkey -M $m $c select-bracketed
done
done
コマンドライン
> (hoge)
# vicmdモードになった状態で(hoge)上にカーソルを置きdi(
> ()
select-quoted
'
、"
、`
の中の文字列をテキストオブジェクトとして扱う
zshrc
autoload -U select-quoted
zle -N select-quoted
for m in visual viopp; do
for c in {a,i}{\',\",\`}; do
bindkey -M $m $c select-quoted
done
done
コマンドライン
> "hoge"
# vicmdモードになった状態で"hoge"上にカーソルを置きdi"
> ""
surround
vim-surroundプラグインライクなテキストオブジェクト操作を実現する
zshrc
autoload -Uz surround
zle -N delete-surround surround
zle -N change-surround surround
zle -N add-surround surround
bindkey -a cs change-surround
bindkey -a ds delete-surround
bindkey -a ys add-surround
bindkey -M visual S add-surround
コマンドライン
# delete-surround
> "hoge"
# vicmdモードになった状態でds"
> hoge
コマンドライン
# change-surround
> (hoge)
# vicmdモードになった状態でcs("
> "hoge"
コマンドライン
# add-surround
> hoge
# vicmdモードになった状態でysw(
> ( hoge )
この機能はzsh 5.0.8から使えるようになっています。
自分は普段vimを使っているので、こういったウィジェットが追加されるのはうれしい限りです。