sponsor Vim development Vim logo Vim Book Ad

RepeatLast.vim : Provides [count]\. to repeat the last group of actions you performed.

 script karma  Rating 28/9, Downloaded by 4390  Comments, bugs, improvements  Vim wiki

created by
joey twiddle
 
script type
utility
 
description
RepeatLast.vim by joeytwiddle

Provides <count>\. to repeat the last group of actions you performed.

                "A beautiful monster" -- bairui in #vim

The '.' key is fantastic for repeating the last 1 action you made.  But
sometimes I do three actions, and then want to repeat them again.  Now
this is just 3\.

BEWARE: Because it uses macro recording *all the time*, it sort of takes
over your Vim, and can impact your usual experience.  Be prepared!

  :set ch=2       if the word "recording" hides messages you wanted

  :let g:RepeatLast_TriggerCursorHold = 1  or  0   for GUI fixes

Also: :RepeatLastDisable :RepeatLastEnable :RepeatLastToggleDebugging



== Usage ==

Assuming your mapleader is '' (the default), these |mappings| are created:

  \?   Display a list of recently recorded actions

  4\?  Display the last four recorded actions

  \.   Repeat the last action (similar to . but may replay just a movement)

  4\.  Repeat the last four recorded actions (including movement actions)

  \\.  Replay the last *repeated* action-group (all 4 actions above)

  9\\. Replay the last *repeated* action-group 9 times (producing 9 times 4)

  \D   Forget (drop) the last action (e.g. to discard an unwanted movement)

  3\D  Drop the last 3 recorded actions (useful to get back to earlier state)

  \|  or  \#

       Temporarily enable/disable recording for the next few actions

       (Allows free movement without adding new actions to history)

  4\G  Grab the last 4 actions and store in register 'g'

  @g   Repeat the actions stored in register 'g'

  :let @i=@g

       Copy the actions to register 'i', so 'g' may be overwritten.

  :let g:RepeatLast_SaveToRegister = 'p'

       Always save any repeated action-group into @p

  :let g:RepeatLast_TriggerCursorHold = 0

       Disable the UI fix.  CursorHold events will not fire.

Commands are also available for the main shortcuts above:

  :ShowRecent   :RepeatLast   :DropLast   :PauseRecording   :GrabLast

Commands to toggle state at runtime:

  :RepeatLastEnable    Enables action recording, enters macro record mode.

  :RepeatLastDisable   Disables action recording, leaves macro record mode.

  :RepeatLast<Ctrl-D>  or  <Tab>      More commands, some toggle info.

New feature - Auto Ignoring:

  After executing a repeat action, action storage will be *temporarily
  disabled* for the number of actions specified by:

    let g:RepeatLast_Ignore_After_Use_For = 10

  This allows you to move to a new location between executing repeats,
  without recording those movement actions.

  Once you have performed enough actions without executing a repeat, action
  storage will be re-enabled, and the ignored actions will be added to the
  history as one large entry.  Although g:RepeatLast_Stop_Ignoring_On_Edit
  prevents this recovery.

Reading this rest of this file:

  You may like to try  :FoldNicely



== Limitations ==

It uses macro recording ALL THE TIME.  The word "recording" will forever be
displayed in your command-line, hiding any messages usually displayed there
by Vim's echo.  To make those hidden messages visible, you will need to:

  :set cmdheight=2    or more

Because recording is enabled, for commands like `q:` and `q/` you will need
to press an extra `q` beforehand, and they will not be recorded in history.

If you want to record your own macro, you can disable the plugin with
:RepeatLastDisable (or you could try just pressing 'q' for a one-time disable).

CursorHold events do not fire in macro-recording mode.  Any visual tools,
taglist updates, etc. that require CursorHold *will not be triggered*.
Other events such as CursorMove, InsertLeave, BufWritePost work fine.
The new option RepeatLast_TriggerCursorHold can now be used to force trigger
of CursorHold events.  It may not be ideal, but mostly works ok.

== Disadvantages ==

Movements j and k will not return to the original column after passing
through shorter lines.  (This is only a problem when using
RepeatLast_TriggerCursorHold.)

Use of some <Tab>-completion plugins may produce unexpected behaviour when
replaying actions including a <Tab>-completion.  (Although Vim's built-in
'.' does not suffer from this.)
 
install details
Drop it in plugin/ folder.

Latest version at https://github.com/joeytwiddle/RepeatLast.vim
 

rate this script Life Changing Helpful Unfulfilling 
script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
RepeatLast.vim 1.34g 2013-07-19 7.0 joey twiddle After \? (:ShowRecent) the <Enter> or <Space> used on the |hit-enter-prompt| should now be ignored.
RepeatLast.vim 1.34f 2013-07-14 7.0 joey twiddle Various modes for TriggerCursorHold, fairly safe default.  Added choice of clobbered Register, ReRepeat, GrabLast, and many more updates.  Now executing via macro rather than feedkeys, so noautocmd will work again.
RepeatLast.vim 1.34e 2013-06-01 7.0 joey twiddle Removed debugging code which I had accidentally left in
RepeatLast.vim 1.34d 2013-05-31 7.0 joey twiddle reduced triggering of CursorHold based on user interaction speed, and other modes
RepeatLast.vim 1.34c 2013-05-09 7.0 joey twiddle Minor updates to documentation.
RepeatLast.vim 1.34 2013-04-25 7.0 joey twiddle Can now trigger CursorHold events, without which some visual plugins may not act normally.
RepeatLast.vim 1 2013-01-02 6.0 joey twiddle Initial upload
ip used for rating: 44.211.24.175

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.
   
Vim at Github