Vi & Vim

使用vi和Vim系列文本编辑器的人员的问答


2
替换整个缓冲区的最有效方法?
目前,我有两种类似的方法可以用其他一些文本替换整个缓冲区(例如在剪贴板中)。 方法1: 删除所有行::%d。 粘贴文字:("+P或类似文字:):put+。 方法2: 直观地选择所有行:ggVG。 粘贴文字:"+P。 但是,我似乎找不到一种单指令射击的方式来做到这一点。我找到的最接近的是:change命令。但这似乎不适用于寄存器。当然,我可以创建一些功能和/或映射一个键来做到这一点。但是在进行所有这些自定义之前,我需要确保: 是否有一些内置命令将一系列行替换为其他文本?就像,您可以:%replace+用剪贴板中的文本替换整个缓冲区吗?

2
如何为每一行执行python语句?
我有以下示例代码,这些示例代码使用Python语句修改了当前行: :py import vim; vim.current.line="["+vim.current.line+"]" 如何对当前文件中的每一行执行此语句? 相关:如何在Vim中使用Python?在stackoverflow

1
如何阻止Vim编写文件而不会引发错误?
我正在尝试从此答案中改进代码,以在创建缺少的目录之前要求确认,这就是我写的内容: function! CreateDirectoryAskConfirmation(path) if !isdirectory(a:path) echohl Question echo "Create directory " . a:path . "?" echohl None let response = nr2char(getchar()) if response ==? "y" call mkdir(a:path, "p") endif endif endfunction autocmd BufWritePre * call CreateDirectoryAskConfirmation(expand("<afile>:p:h")) 有一件事我错过了:我不要按y在提示我想让Vim中止写,所以我没有得到错误E212: Can't open file for writing,我也不需要打另一个键,使该错误信息消失。有办法实现吗?
10 save  autocmd  error 

1
单词是否有<Cw>?
在插入模式下按Ctrl- w将删除前一个单词。它等效于Ctrl- Backspace在Windows中和Opt- Delete在OS X中,并确实加快了键入速度。 Vim有的不同的概念word和WORD(见:help word)。这是无价的文字导航:它的区别w和W,b和B,等等。 Ctrl- w经营上word。有类似的指示WORD吗?

1
不正确缩进JavaScript链调用
例如,如果我有一些这样的JavaScript代码: var widget = library() .chainCall1() .chainCall2() .chainCall3(); 如果我使用=命令自动缩进,它看起来像这样: var widget = library() .chainCall1() .chainCall2() .chainCall3(); 这不是我想要的。我希望它像最初一样缩进链式调用。我怎样才能解决这个问题?


2
从头文件自动从函数原型中创建函数
介绍 使用C和C ++进行编程时,通常将函数原型和实际函数分为.h/ .hpp和.c/ .cpp文件。遗憾的是,将函数原型从一个文件传输到另一个文件非常繁琐,并且需要同时打开两个文件(或良好的内存),并且需要进行很多不必要的输入,尤其是当对参数或成员名称进行更改时制作。 例 foo.hpp: int someFunction(int someArgument); class someClass { public: someClass(); ~someClass(); int anotherFunction(int anotherArgument); }; foo.cpp: #include "foo.hpp" int someFunction(int someArgument) { // Code goes here } someClass::someClass() { // Code goes here } someClass::~someClass() { // Code goes here } int someClass::anotherFunction(int anotherArgument) { …

1
多个缓冲区,相同文件,不同设置
是否可以同时在不同的设置下编辑文件?更准确地说,我想在Vim的同一实例中有多个缓冲区,它们具有相同的内容(更改一个缓冲区会立即影响另一个缓冲区的内容),但是光标位置,标记,语法高亮等都不同。 常见的用例包括独立编辑同一文件的不同部分(例如,无需在一个实例中进入可视模式而在另一实例中中断当前的可视模式选择),以及编辑混合格式的文件(例如HTML和Javascript)而无需切换设置。(第二个用例的另一种方法是根据光标位置自动更改设置,但这超出了此问题的范围。) 一位编辑的提及无疑会引起震惊,称其为“间接缓冲区”。
10 buffers 

3
阴影中的帮助
有时,当我在帮助系统中搜索特定主题时,它将被另一个主题遮盖。 例如,如果我确实需要有关:h display“ GUI资源”的帮助,那么当我需要有关“显示”设置的帮助时(如所示set display=lastline)。 如何找到这些“阴影”主题,或列出最相关的匹配主题?

3
如何使用触控板进行水平滚动?
我只是注意到我的触控板滚动条在Vim,惯性等所有方面都有效。我想将其更改为水平工作-因此,我可以上下滚动以使光标左右移动,而不是按住右键不放很多时间。 如何将滚动映射到左/右移动?
10 scrolling  mouse 



2
如何使打开新标签页成为默认选项?
当我打开vim多个文件(vim f1 f2 ...)时,如何使它们直接在选项卡中打开而不使用-p? 我希望将shell行为与vim行为区分开,删除vim基于别名的别名等。这就是为什么我不想使用别名等的原因(因此,no -p)。 我敢肯定,已经在一些SE网站(例如SO)上询问了这个网站。但是,我无权判断哪种方法是最好的方法,因此我也希望就建议的方法为什么很好的问题做个说明。 对于链接的特定SO帖子: 公认的答案是正确的tabpagemax=9999。称其为个人偏见,但我看到设置了一个很大的限制,并且我认为出了点问题(如果看到的话,我会觉得这种感觉chmod 777)。 :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&amp;vim 另一个答案导致一个额外的空选项卡被打开,同时更加简洁。 :autocmd VimEnter * argdo tabedit 我希望得到一个没有打开额外选项卡并且没有将限制设置为较大值的答案(或解释为什么这不是一件坏事)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.