我刚刚使用我的Vim(或者更确切地说是gVim)安装了Ctags(以帮助进行C++开发),并希望找到您最喜欢的命令,宏,快捷方式,以及随之而来的提示......
分享你最好的武器库.在Vim开发中你会推荐哪些其他Vim附加组件用于C++?
编辑您将与Ctags一起使用的其他附加组件?
EDIT2您使用哪个版本的gVim标签?这有什么不同吗?
EDIT3如何增强大型和小型项目的编程体验?
我有一堆文件.我记录了一个在一行上执行操作的宏.我想在文件中的所有剩余行上重复该宏.有快速的方法吗?
我尝试了Ctrl + Q,突出显示了一组行,然后按下了@@,但这似乎并没有成功.
大约一年前从Vim搬过来后,我正在使用邪恶模式.我做了很多自定义,但还没有找到如何保存vim风格的键盘宏.
我可以使用与Vim完全相同的键在邪恶模式下定义和运行它们.
我想将其中的一些保存到我的init.el文件中以便在会话之间使用,但我无法在线找到任何引用,并且找不到正确的语法.
如何将这些邪恶模式键盘宏保存到文件中?是否有一些原因我应该使用原生的Emacs键盘宏,有没有办法通过@a键运行这些?
我知道如何重复Vim中的最后一个命令.我用..
但是我怎么能重复最后一个宏呢?@q每次我想重复它都会有点不舒服.
我试过.但它只是重复宏中的最后一个命令.
有没有更短的方法呢?
有时我需要在文件中插入一些类似的行,这些行仅在序列号上有所不同.例如,
print "func 1";
print "func 2";
print "func 3";
print "func 4";
print "func 5";
Run Code Online (Sandbox Code Playgroud)
使用vim,我最后使用[yypppp]复制粘贴第一行,然后更改最后四行.如果要插入更多行,这非常慢.
在vim中有更快的方法吗?
一个例子是:
初始状态
boot();
format();
parse();
compare();
results();
clean();
Run Code Online (Sandbox Code Playgroud)
最终状态
print "func 1";
format();
print "func 2";
parse();
print "func 3";
compare();
print "func 4";
results();
print "func 5";
clean();
Run Code Online (Sandbox Code Playgroud) 有时当我的 vim 宏变得太长时,就会出现小错误。但是不能一步步执行宏,真的很难找到问题所在。
是否有可能单步调试 vim 宏或以任何方式调试它们?
在VIM宏中,如何处理条件操作?
if condition is true
do this
else
do something else
Run Code Online (Sandbox Code Playgroud)
文件内容:
_
abcdefg
Run Code Online (Sandbox Code Playgroud)
宏将做:
G^
if letter is one of the following letters: a e i o u
gg$i0<ESC>
else
gg$i1<ESC>
Gx
Run Code Online (Sandbox Code Playgroud)
重复7次缓冲区将是:
_0111011
Run Code Online (Sandbox Code Playgroud)
那么,我如何验证条件是否为真然后运行一个动作?
我知道我可以使用 录制宏q<char>并运行它们@<char>。我还知道我可以使用@@.
但是@@是两个完整的按键!这也太多了吧!特别是当我多次运行该宏时。我知道,但如果我事先<num>@<char>不知道怎么办?<num>
我实际上正在寻找类似运行宏的交互式搜索和替换(请参阅Vim 中的交互式搜索/替换正则表达式?)。这可以做到吗?
我一直在使用 VIM 处理 500 个单独的文件,以使其中一个值唯一。我不会粘贴它,因为它完全是一个拼凑:)
使一个元素唯一后,我有一个文件,其中包含 500 条记录,并用空行分隔。
录制一个宏来标记第 1 行,然后找到空白并标记上一行,然后将该块写入文件,@b 增加 1。
因为我无法弄清楚如何在写入文件期间递增 @a ,所以我将其粘贴递增,然后将其拉回到 @a 。
"ap0:let @a="""^MAywdd
Run Code Online (Sandbox Code Playgroud)
这一切都工作得很好,除了每 7 个数字增量命令会跳过三个数字,因此我得到的是 XML001.xml 到 XML0763.xml 或类似的内容,而不是 XML0001.xml 到 XML0500.XML。
为什么每 8 次调用就会跳过 3 个数字?
我只是很好奇,因为目前只要文件名是唯一的,它们的编号并不重要,但我最终需要使输出名称与 @b 的值相匹配。
编辑 疯狂猜测这与 0 到 9 寄存器丢失轨道有关?
有没有办法在插入模式下增加@a,例如
:'a,'b w XML"Increment @A".xml
Run Code Online (Sandbox Code Playgroud) 在下面的vim宏从这篇文章中,作者给出了解释.我理解一些但不是一切.
:qccwcommand<Esc>:w<Ctl-W>jj<Enter>q
Run Code Online (Sandbox Code Playgroud)
此宏(包括记录开始/停止,如果您想知道)将把当前的'path_to_command'字改为'command',将文件写入磁盘,将窗口分割更改为grep搜索结果,向下移动一行在结果中导航到该结果的位置.
Q1.这是ccw做什么的?是否与cw(改变词语)有关但我不确定.
Q2.:w一定要写,对吗?
Q3.这是<Ctrl-W>jj做什么的?以下是:h CTRL-W_J关于什么,但我不确定我是否正在寻找正确的帮助,也不确定在这种情况下帮助的含义.
*CTRL-W_J*
CTRL-W J Move the current window to be at the very bottom, using the
full width of the screen. This works like closing the current
window and then creating another one with ":botright split",
except that the current window contents is used for the new
window.
Run Code Online (Sandbox Code Playgroud) 在vim中,是否有一种更优雅的方式来跳转到光标下的行号
map gn "nyw@nG
Run Code Online (Sandbox Code Playgroud)
"gn"或其他一些关键组合?这需要确保光标位于数字串的开头.此外,根据寄存器"n"中的内容,此宏可能有点危险.
不完全确定甚至为什么这样做:@n意味着执行寄存器n(数字)中的内容,而不是将它与"G"连接起来.
具有类似功能的功能
call cursor(expand("<cword>"),1)
Run Code Online (Sandbox Code Playgroud)
似乎也没有工作.
思考?