Skip to content
# Vim's text-objects-ish for zsh (obsolete for zsh-5.0.8)
Shell Makefile
Branch: master
Clone or download

Latest commit

hchbaw Adapt for zsh-5.0.8 changes once more
Signed-off-by: Takeshi Banse <>
Latest commit 36766fa Jun 5, 2018


Type Name Latest commit message Commit time
Failed to load latest commit information.
opp Adapt for zsh-5.0.8 changes once more Jun 5, 2018
t Teach underscore (_) as iskeyword-ish Apr 18, 2014
.gitignore Teach underscore (_) as iskeyword-ish Apr 18, 2014 Minor update spelling Jul 9, 2015
opp.plugin.zsh Adding a symlink for compatibility with oh-my-zsh Jul 21, 2014
opp.zsh Adapt for the upstream zsh-5.0.8 changes Jul 9, 2015


This code is obsolete for zsh-5.0.8 and greater. zsh-5.0.8 comes with much more features out of the box.

Vim’s text-objects-ish for Zsh.

Takeshi Banse <>
Public Domain

Thank you very much, Bram Moolenaar!

I want to use Vim’s text-objects in Zsh.

To use this,

  1. source this file.

     % source opp.zsh
  2. If you wish to load the extensions, source them afterward.

     % source opp/*.zsh

Note This plugin overwrites some bindings within the vicmd-keymap (details below).

Optionally you can use the zcompiled file with the autoloading for a little faster loading on every shell startup, if you zcompile the necessary functions.

  1. Prepare zcompiling the defined functions and the install command.

     % OS=(~/path/to/opp.zsh/{opp.zsh,opp/*.zsh})
  2. If you have some opp/surround.zsh’s configurations, those configurations could be zcompiled at this point. Assuming you have such a configuration file in ~/.zsh/opp-surround.zsh, you could do this.

     % OS=(~/path/to/opp.zsh/{opp.zsh,opp/*.zsh} ~/.zsh/opp-surround.zsh(N))
  3. Generate the ~/.zsh/zfunc/{opp,opp-install}.zwc.

     % (zsh -c "for O in $OS;do . $O;done && opp-zcompile $OS[1] ~/.zsh/zfunc"

    Set up an autoload clause appropriately.

     % { . ~/.zsh/zfunc/opp-install; opp-install }
     % autoload opp

Note: This script replaces the following vicmd key map entries: c, d, g~, gu, gU and y. Please be aware of that, since this means that if you set bindings manually or even reset them after sourcing this plugin by using

    % bindkey -d

this plugin will not work.



Thank you very much, thinca and tarao!


Thank you very much tpope!


  • TODO: in case these (ci" with improper double quotes) situations.
  • TODO: operator (currently c, d, g~, gu, gU and y)
  • TODO: o_v o_V o_CTRL_V
  • TODO: as is op ip at it



  • Fix textobj-between keybind. Thank you very much for the reoprt, wellle!
  • Much nicer README. Thank you very much for your contributions, roryokane!


  • Add ~, gu and gU.
  • Paren-matching operation fixes.


  • Add opp/surround.zsh


  • Add opp/textobj-between.zsh
  • Add opp-installer-add for the extensions.
  • Add aw aW iW and fix iw.


  • Add textobj-between link.


  • Cleanup inbetween code.


  • Fix cc dd yy not work bug.


  • Initial version.
You can’t perform that action at this time.