LoginSignup
23
20

More than 5 years have passed since last update.

zshでvimのtext-objectライクな操作をする

Posted at

今までzshのvicmdモードではdwcwのような単純な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を使っているので、こういったウィジェットが追加されるのはうれしい限りです。

23
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
20