Vi & Vim

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

1
如何在宏中使用插入模式完成?
我正在尝试定义一个宏,该宏可以快速生成随机单词列表。 我希望宏将其转换为类似的列表 a b c d e 进入这个 arezzo bywords czars détente eyrie 到目前为止,我有: 将光标放在字母上 a 开始录制宏 qq a 进入插入模式 <C-x><C-k> - perform dictionary completion on the character before cursor - in this case the letter一个 <C-p>选择出现的完成列表中的最后一项,在我的系统上,其单词为arezzo。(请注意,我已将其longest包括在我的'completeopt'设置中,<C-p>在完成过程中以这种方式工作是必需的:)'set completeopt=longest,menuone,preview'。 <C-y> 接受完成 ^[^[ 退出插入模式 j 下移到下一行,准备在下一行进行相同的操作 q 停止录音 当我创建宏并手动执行步骤时,一切正常,但是当我执行宏时,我看到一条消息在命令行中闪烁,例如: 扫描字典文件 并且没有任何反应,仅j运行了宏中的命令,即光标向下移动了一行,但没有任何完成命令运行。 是否可以在宏中使用插入模式补全,如果可以,该怎么办?

4
如何将vim命令的结果输出到shell
假设我在shell(bash)中,希望看到:scriptnames可以提供的输出,但是不想启动vim,或者我想将其回显到另一个文件中。 所以我执行 vim +scriptnames 这向我显示了所有脚本,但是如何将其回显到Shell的stdout中呢?
11 bash 

1
Vim文件名/路径完成
我知道我可以使用ctrl + x,ctrl + f(compl-filename)从当前目录完成文件名/路径。与set autochdir结合使用时效果很好,后者将更改将当前目录更新为活动缓冲区的目录。 但是,我开始使用airblade/vim-rooter将当前目录设置为“项目”文件夹。现在,文件名补全总是从项目文件夹开始。 问题:是否有办法使文件名补全使用活动缓冲区的目录而不是当前目录?或其他解决方法? 在stackoverflow中也被问到

3
如何有选择地更改突出显示的字符串?
通过搜索,我突出显示了要更改的字符串。现在,我只想替换突出显示的文本。我正在使用n前进到搜索字符串的下一个实例。我当时以为我可以做类似的事情,ciw但那会改变整个单词,而不仅仅是突出显示的文本。 我很熟悉,:%s/old/new/g但我不想更改所有实例。相反,我想将光标移到每个实例,然后决定是否更改它。
11 search  replace 

3
在终端上通过vim的doc(:help)链接时出现问题
我在终端上阅读vim的文档时遇到了一些麻烦,因为我无法遵循给出的链接。 我引用: 跳转至主题:将光标置于标签(例如| bars |)上,然后按CTRL-]。 问题是我使用的是西班牙键盘,其中“ +”和“]”位于同一按钮上,因此当我按CTRL-]时会进行缩放。 我可以将CTRL-]映射到其他任何键还是有其他选择?

3
如何获得视觉上的vimscript选择?
如果在插入vimrc之前要测试几行vimscript,是否可以直观地进行选择,然后提供它们? 我努力了 进行视觉选择v,然后进行动作进行选择等,然后 :'<,'>so 但是vim给出了一个错误 不允许范围 也 :'<,'>w | so 给 采用 !写部分缓冲区 如何获得视觉选择的vimscript?

1
如何在vim中实现自动列表编号?
合同等正式物品需要编号清单。 1. Some text 2. More text 2.1. Sub-section text 等等 关键是消除在插入或删除列表项时的手动重新编号。这可能vim吗?列表编号的一致性确实很难手动跟踪。 与此相关的目标之一是通过非混淆的存储格式(例如明文)来实现适当的修订控制。

1
如何在本地vimrc中添加其他语法突出显示规则?
我在Fedora和Win7上都安装了gvim。我发现Fedora上的vim和gvim都没有突出显示c代码中的函数名称,而win7上的gvim突出了它。 我发现在win7上,vim73/syntax/c.vim末尾有其他行: syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2 syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1 hi cFunction gui=NONE guifg=#B5A1FF 如果我将这些行添加到c.vimFedora上,gvim也可以突出显示函数名称。 为了保持可移植性,我只想修改.vimrc即可突出显示函数名称。但是,将这些行添加到中后.vimrc,它不起作用。 那么,有人可以帮助我吗?我进行了搜索,找到了许多解决方案来突出显示vim中的函数名称。但是我很好奇如何使这些线在.vimrc。非常感谢!


6
如何删除光标上方/下方的行,而不是当前行?
是否有删除当前行上方的一行(或n行)的命令?以上=当前不包括在内。 即,是否有dk不删除当前行的替代方法?与o/ O和p/的P工作方式类似,但具有删除功能。 目前,我正在执行kdd,它将光标向上移动一行并删除它。我可以nnoremap <Leader>d kdd和nnoremap <Leader>D jdd-,但是有一个不移动光标的替代品似乎是一个更好的选择。有这样吗?

6
删除Vim然后粘贴而不换行
在vim中,很多时候我想完全删除一行,因此我使用dd。但是,然后我需要将该行粘贴到行中的其他位置,但这会在粘贴之前插入换行符,因此,这对我很难获得所需的结果。例如, while( pasteInHere ) { cin >> n; // Delete this line completely with dd } 当我使用上面的代码执行此操作时,我得到: while( pasteInHere ) cin >> n; // Delete this line completely with dd { } 这与我想要的结果相去甚远...我该如何抑制这种换行行为,或使用另一种方法来非常有效地执行此操作?我认为d $不好,因为我不仅必须转到行首,而且如果我也想删除空行,则需要在另一个寄存器中删除它,我觉得应该有一个更简单的方法!谢谢。


1
在没有文件,不存在的文件或空白文件的情况下启动Vim时如何运行autocmd(但从现有文件开始时则不能)?
当我启动Vim时,我想在以下情况下运行一个autocmd: 没有指定文件名。 文件为新文件时。 文件存在但完全空白时。 在以上三种情况下,我都想运行一个autocmd;具体而言,我想自动启动插入模式为只在上述情况(而不是当我打开一个已经存在和不为空的文件)。 更新: 我试过将以下内容放入我的_vimrc,但是运气不好(另外,我不确定在vim中是否有一个函数在打开文件之前先计算文件中字符的数量(看是否为零): if @% == "" || filereadable(@%) autocmd BufRead,BufNewFile * startinsert endif

1
如何在Vim中更改撤消粒度?
在某些时候,当我点击时,Vim会撤消整个单词u。 [i]typing some words[C-c][u] 会导致 typing some 但是,撤消粒度似乎已更改为一次删除一个字母。 [i]typing some words[C-c][u] 结果是 typing some word 我记得读过一些有关在实用Vim中自定义撤消粒度的信息,但是我不记得如何控制它。任何帮助表示赞赏!
11 undo-redo 

2
在撤消树中搜索文件的所有版本
有没有比一次一次查看文件的随机旧版本(使用香草VIM命令,Gundo或其他插件)更简单的方法来查找Vim的撤消树中的特定更改? 理想情况下,我想输入一个搜索模式,使其与Gundo预览窗格中显示的所有差异匹配,然后让Gundo向我展示哪些版本具有与该搜索匹配的差异。 这个问题提出的要求几乎完全相同,但是问问者接受了一个仅推荐Gundo的答案,尽管它很不错,但似乎并没有满足我的要求。 我已将此作为Gundo的一项新功能,但未得到任何回应。 编辑:对于undotree,此功能有一个开放的请求。 注意:此问题已从超级用户 “手动迁移” 。
11 undo-redo 

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.