.
重复上一个编辑命令。是否可以重复上一个UI操作命令?
例如,我可以编写
10<C-W>-
来缩小窗口十行。能按一下某些键会很高兴。如果要进一步缩小此命令,可以轻松地重复此命令。
#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
–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 +之后我就可以打了;重复多次。
插件通过为每个指定的键创建映射来工作。
使用
f
或t
时,;
和,
映射将被清除回其默认行为。 G; ; ; ; 评论
@albfan我不确定我是否理解您的问题,但对于我来说,按,立即执行操作和5,也可以按预期工作。您是否可能将mapleader设置为?
– joeytwiddle
18 Mar 10 '18 at 10:15
评论
相关:stackoverflow.com/q/6952636/2072269(没有答案,可以在调整大小后使用)。@muru:很好,但这是针对这种情况的。如果我做了类似fz然后10;的操作怎么办? :tabm +1呢?这些都必须是特殊情况吗?
我想你误会了我。我说的是链接的帖子没有任何答案(在其他人提出建议之前)。
哦!好的,那么我们在同一页上@muru :)
这里的完整示例将