我知道我可以使用.重复上一个编辑命令。

是否可以重复上一个UI操作命令?
例如,我可以编写10<C-W>-来缩小窗口十行。
能按一下某些键会很高兴。如果要进一步缩小此命令,可以轻松地重复此命令。

评论

相关:stackoverflow.com/q/6952636/2072269(没有答案,可以在调整大小后使用)。

@muru:很好,但这是针对这种情况的。如果我做了类似fz然后10;的操作怎么办? :tabm +1呢?这些都必须是特殊情况吗?

我想你误会了我。我说的是链接的帖子没有任何答案(在其他人提出建议之前)。

哦!好的,那么我们在同一页上@muru :)

这里的完整示例将 ++++映射到 + + + +

#1 楼

点命令.之所以起作用是因为Vim会“保持跟踪”更改缓冲区内容的命令。如果运行:echo b:changedtick,则会看到它随着对当前缓冲区的每次更改而递增。

但是Vim不会“跟踪”非编辑命令。因此,不,您的要求无法完成。

#2 楼

在vim中,默认情况下无法执行此操作,因为vim不会跟踪先前执行的wincmd。但是,可以通过一些巧妙的映射来做到这一点: <C-w>品种。使用nore发出的任何wincmds将不会重复。另外,任何包含多个字符的wincmds都无法执行(例如:wincmd)。

相关帮助主题


/> <C-w>gf
:help v:count
:help getchar()
:help nr2char()
:help expr1
:help :wincmd
:help :execute
:help :for


评论


太好了,这是编写良好的VimScript的绝佳示例!一些次要的(可能是挑剔的)反馈:此重复命令的行为与内置方法不同。举止得体。当提供计数给。时,先前的计数将被忽略。因此2dd后跟3.将删除2行,然后删除3行;相反,在您的映射中,2 -后跟3Q会将窗口缩小2行,然后缩小6(= 2x3)行。这种行为很好,但是在选择自定义命令的行为方式时,可以从类似的内置Vim命令中汲取借鉴。

–tommcdo
15年7月20日在14:52



谢谢!另外,我明白您对计数工作的意思。我可能会更改它,以便它可以那样工作。

–EvergreenTree
15年7月20日在15:17

#3 楼

子模式插件可以帮助您。您可以通过键入<C-W>-定义输入的“子模式”,其中,您已经定义了-(也许还有+)以继续调整窗口大小。

#4 楼

还有另一个名为repmo.vim的插件(“重复动作”),可以执行您想要的操作。我的当前配置是这样的:

let g:repmo_mapmotions = "j|k h|l zh|zl g;|g, <C-w>w|<C-w>W"
let g:repmo_mapmotions .= " <C-w>+|<C-w>- <C-w>>|<C-w><"
let g:repmo_key = ";" 
let g:repmo_revkey = "," 


所以做完5 CTRL-W +之后我就可以打了;重复多次。

插件通过为每个指定的键创建映射来工作。

使用ft时,;,映射将被清除回其默认行为。 G; ; ; ;

评论


@albfan我不确定我是否理解您的问题,但对于我来说,按,立即执行操作和5,也可以按预期工作。您是否可能将mapleader设置为?

– joeytwiddle
18 Mar 10 '18 at 10:15