Vi & Vim

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

1
我如何跳到下一个“段落”?
现在,我正在处理一些超过1000行的文本块。有没有简单的方法可以移至下一段的开头? 我目前的解决方法是搜索两个连续的换行符: /\n\n 另一个解决方法是 vip Esc j vip v isually选择我 Ñ p aragraph(其也将转至段末尾) Esc 从视觉选择中逃脱 j 下移

3
即使我开始搜索“”,我怎么也可以继续前进?要么 '#'?
Vim有(至少)两组在相反方向上搜索的命令。键入/然后使用模式将在文档中向前搜索该模式;键入?,然后模式将向后搜索。*和#命令之间存在相同的关系。 我不喜欢这些命令还设置了nand N命令的搜索方向。使用后/,n向前浏览文档并向N后浏览;使用后?,n向后N前进。(换句话说,n始终与原始搜索方向相同,而N始终与另一个方向相同。) 我怎样才能获得n前进通过文档,N向后走,不管我开始寻找哪个方向的?

2
交换函数参数
重构代码时,能够交换函数参数将很有用。 更改为例如: func(foo[0], bar(), baz.spam) 进入 func(baz.spam, foo[0], bar()) 有什么方法可以将参数交换到左侧/右侧,并在函数括号和逗号之间保持适当位置? 请注意,如果您要考虑参数本身就是带有自己的参数的函数调用的参数,则可能会变得很func(baz->spam, foo[0], bar(a, b, c))复杂-例如:-支持这些情况可能会涉及一些更全面的解析。
19 macro  refactor 

1
map,noremap,abbrev和noreabbrev命令之间有什么区别?
这些命令以某种方式将一组击键转换为另一组击键,但是我对哪种击键最适合某些情况感到有些困惑。此外,还有它们的!变体。目前,我对它们的使用非常随意,所以我能知道与它们相关的陷阱是什么吗?特别是有关各种模式版本的注释可能会很有用,因为我从Peter Rincker那里学到了一条注释,该注释cmap可以扩展到行中的几乎所有位置,不仅是在使用:命令时。我可以采取哪些预防措施来预防潜在的陷阱?

8
完成搜索后,如何自动关闭“ hlsearch”?
我喜欢“ hlsearch”设置,但是搜索完成后,我发现它令人讨厌。特别是当我搜索具有很多匹配项的内容时。我知道我可以用 :set nohlsearch 但这需要整个16次击键,更烦人的是,我必须再次打开它才能进行下一次搜索 :set hlsearch 有什么方法可以让hlsearch在开始搜索时自动打开,而在搜索完成后自动关闭?例如,如果我进入插入模式或修改文本,hlsearch是否已关闭而没有任何其他按键操作?
19 search  highlight 

1
了解CTRL-U组合
在这个答案中,我面对的是实际函数名称之前和之后的CTRL-Uin函数调用:。 :nnoremap <buffer> <cr> :<C-U>call append('.', repeat([''],v:count1))<cr> 这是帮助的内容: CTRL-U Scroll window Upwards in the buffer. The number of lines comes from the scroll option (default: half a screen). If [count] given, first set the 'scroll' option to [count]. 我自己尝试过,它按我的预期工作。但是我不太了解有关该scroll选项的部分。他们是什么意思'scroll' option? 而且它在插入模式下还会做一些奇怪的事情。据我了解,它删除了从光标到该行开头的所有内容,然后将结果行与上面的行连接起来。

6
我可以用逗号(或其他字符)加入行吗?
我知道我可以在Vim中加入行J以及它们的几个变体(gJ,等等);J将“删除缩进并最多插入两个空格”。 但是,还有插入其他字符而不是两个空格的简单方法吗?例如逗号(,)或逗号和空格(,)? 鉴于: 8 9 10 32 我想结束于: 8, 9, 10, 32 要么: 8,9,10,32

1
将TAB设置为2个空格
我已经浏览了各种答案,这些答案暗示着在.vimrc中设置以下内容将适合于迫使制表符插入变为空格。 filetype plugin indent on " On pressing tab, insert 2 spaces set expandtab " show existing tab with 2 spaces width set tabstop=2 set softtabstop=2 " when indenting with '>', use 2 spaces width set shiftwidth=2 但是,当我尝试使用2个空格时,它仍然默认为每个选项卡4个空格。我已尝试移至set expandtab这些声明的底部。我试图删除该softtabstop声明。我也搜寻了其他问题的各种答案。如果有人可以帮助我,那就太好了。


5
将视觉选择复制到键盘后,返回到原始位置
当我突然决定需要复制该段落时,光标位于段落的中间: 因此,我键入vip以直观地选择该段落: 现在,我点击cmd+C复制到剪贴板(这可能在您的系统上有所不同,但不应与帖子的中心问题相关),这使我的光标停留在该段的开头: 而不是理想的位置,那是我刚开始时的位置。 请注意,当用非视觉方式取消选择时,会出现相同的问题yip。 在执行这样的选择/复制操作之后,我希望默认行为是“返回到原始光标位置”。是否有配置使之成为可能?

5
是否可以将vim命令传递到vim?
我要运行以下shell。 wea-this is the end of the second word | vim j exit 0 我希望可以将击键w(向前移动一个单词),然后e(该单词的末尾),然后a(附加)然后-this is the end of the second word(文本)用管道传递到j已包含单词的Vim文档。 当我运行shell脚本时发生以下错误。 /root/bin/tt.sh: line 1: wea-this: command not found Vim: Warning: Input is not from a terminal 我正在运行Ubuntu 14.04。两种类型的答案将不胜感激: 如何使用管道来达到这个理想的结果。 我可以使用“ Vim命令”(不是ed或sed命令)从Shell脚本编辑文本文档的另一种方法。
18 invocation 

2
替换字符串而不改变大小写?
由于我一起工作的领域特定语言的一个怪癖,我经常面临的(选择性,而不是全局)的任务更换term或TERM用word或WORD分别。 这意味着,我不区分大小写地搜索term,并希望将其替换为,word 同时保持原始大小写term不变。 由于检查全部的term为一致的大写/小写将是困难的,是不是真的有必要,我会满足于大/小写word/ WORD被决定的第一个字母term。 我怎样才能做到这一点?
18 substitute 

1
如何获得Vim的实际高度和宽度?
winheight()并winwidth()返回当前窗口中的列数/行数。我正在寻找的是更接近于编辑区域或显示区域(如果在终端中运行)的实际高度和宽度的东西。这个问题winheight()和winwidth()从这些值计算出纵横比与实际长宽比脱节。 :echo winwidth('%') winheight('%') winwidth('%') * 1.0 / winheight('%') 104 51 2.039216 缓冲区的屏幕截图大小为936x918像素,显示的纵横比为1.019608。我想我可以通过使用字体大小来获取实际值,但是如何呢? 这是我如何在垂直分割中使Vim打开帮助的后续措施?。我正在尝试适应Nobe4的解决方案。

4
清除行的速度快于[0] [d] [$]
有没有一种比行上擦除文本更快的方法 按下0以跳到开始,然后 按d$删除直到该行的末尾? 另外,如果我想删除除缩进以外的所有内容怎么办?有没有办法做到这一点?

4
如何抑制Vim内部的“从STDIN读取”消息?
当使用Vim读取stdin时,它会显示一条信息: $ echo foo | vim - Vim: Reading from stdin... $ 这只是一个例子。实际使用中不允许使用shell构造。 vim <(echo foo)不是一个选择。 我可以仅使用Vim选项和/或vimrc设置来禁止这样做吗? 如果您确实需要知道这是干什么的,我正在尝试使用Vim来阅读联机帮助页(无耻的插件)。GNU man不允许使用shell构造MANPAGER,并且通过使用ftplugin/man.vim和其他方法,我已经成功地使用just来获得舒适的体验MANPAGER="vim -"。最后剩下的烦恼是在我查看过的每个联机帮助页之后打印的难看的消息。
18 vimrc  options 

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.