Vi & Vim

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

4
如何每4行反转一次?
首先,这是我在这里的第一篇文章,我想说的是,我发现VIM是一个很好的工具,并且这里的论坛对于寻找问题的答案非常有帮助,许多有用的人提供宝贵的帮助。我对VIM还是很陌生,所以我所学到的几乎所有东西都来自这里。 我的问题是:我知道如何反转文件中的所有行(:g / ^ / m0等),但是有一种方式可以反转文件中的每4行,以便 line1 line2 line3 line4 line5 line6 line7 line8 ... 变成 line4 line3 line2 line1 line8 line7 line6 line5 ... 您可以假设在这些文件中总是存在4行的精确倍数。
13 vimscript 



4
\ r和\ n在s命令中表示不同含义的原理是什么?
我们都知道,在搜索时\n是换行符,并且\r是回车符(^M),但是当替换\r是换行符时\n则是空字节(^@)。 这种不对称的根源是什么?鉴于这种行为是……至少可以说是怪异的(当您第一次出错时,它适得其反)我希望这是有一些奇怪的历史原因。 (顺便说一下,是否有某种方法可以“修复”此行为并获得更直观的效果?)

2
如何自动修复通过合成报告的常见掉毛错误?
我开始在vim中使用syntastic插件来报告代码中的lint错误。javascript 我还将eslint与syntastic集成在一起,它向我展示了一些不错的错误,并警告了万一它们出现在我的.eslintrc文件中的所有规则中。 有什么方法可以解决一些常见的错误,例如,用键盘敲击会丢失分号,空格等? 编辑: 我发现eslint有一个选择 --fix Automatically fix problems 可以用于此类情况。我需要运行此命令让eslint解决这些问题 eslint --fix -c myconfig file.js 我想知道如何与vim集成?

3
什么是使用缓冲区的更有效方法?
最近,我一直在大幅度减少使用的插件数量,因此我只使用内置的Vim功能来寻找答案。 当我编辑许多缓冲区时,我一直注意到我的工作流程中存在一个缺陷:我在一个缓冲区上,我想切换到另一个我不记得名字的缓冲区,并且它不是替代缓冲区。因此:b#无法使用,并且使用命令的完成:b也不方便。 为此,我正在执行以下操作: 第一次使用:buffers来获取打开缓冲区的列表 记住我要使用的缓冲区编号 按下Enter以关闭缓冲区列表 使用:bX与X缓冲区的使用数量。 这个工作流程对我来说似乎很繁重,所以我在我的代码中添加了以下几行 .vimrc: " Improve the navigation in the buffers nnoremap <Leader><S-b> :B<CR> command! B call Buffers() function! Buffers() execute "buffers" let buffer=input("Enter a buffer:") execute "b" . buffer endfunction 这给了我一个命令:B(和一个映射),该命令调用该函数:buffers等待输入,最后调用:b该输入。 它工作正常,但令我惊讶的是我不得不开发这样的功能:通常Vim具有非常有效的默认工作流程,所以我想知道是否有更好的方法可以切换到一个我不知道的缓冲区。它已在我的编辑会话中打开。
13 buffers 


3
如何自动小写单词的第二个字母?
当我不得不输入大量文本shift时,在写句子的第一个字母时,我常常会按住手指,这通常会给出: [...]end of sentence. NEw sentence[...] 这里E的NEw应该是小写。然后,我试图创建一个函数来检测我键入的句子的第一个单词的第二个字母是否为大写字母,而将其为小写字母。重要的部分是,当我键入句子的结尾时,更正应自动完成。 到目前为止,我已经尝试过使用autocommand事件,InsertCharPre然后才意识到该事件触发的功能无法修改文本。 有什么好的解决方案? 请注意,到目前为止,我不需要关注诸如首字母缩略词之类的边缘情况,首字母缩略词应使用大写字母或类似的东西。 编辑我做了这个,这不是一个完美的解决方法: autocmd CursorMovedI * call RemoveUnwantedUpper() function! RemoveUnwantedUpper() " Get the current sentence " Based on http://stackoverflow.com/a/23315227/4194289 let l:save_clipboard = &clipboard set clipboard= " Avoid clobbering the selection and clipboard registers. let l:save_reg = getreg('"') let l:save_regmode = getregtype('"') normal! …

2
执行普通命令后如何恢复光标位置?
我正在尝试编写一个函数,用美元符号($)替换当前行第六列中的字符,但是我希望光标保持在调用该函数之前的位置。 因此,我尝试存储当前列,执行更改,然后返回以下函数: function! DollarSplit() let col_number=col(".") "stores the current column number of the cursor normal! 6|r$ " replaces the 6th caracter in line with a $ execute col_number."|" endfunction 我可能对execute命令有一些误解...或者我应该创建一个包含要执行的命令的字符串?

4
如何在Windows上使gVim像在Linux上一样?
我是Linux上Vim编辑器的经常用户,现在我想在Windows上使用它。 我下载了Windows的Vim,恰好是gVim。Vim的rx某些功能在gVim 7.4中不起作用,例如可视块,命令和其他几种组合键。 我想在Windows上使用Linux上的相同/原始Vim。该版本也可用于Windows吗?或者,我可以使用类似于Unix格式的设置吗?

5
快速搜索,仅限于C ++函数
我从事一个相当大的C ++项目。其组织中最令人沮丧的方面之一是非常大的功能置于荒谬的大文件中。 我经常想搜索特定全局变量或函数调用的任何实例,仅限于当前函数。是否有一个合理的简单公式可以实现这一目标? (我确实安装了ctags并使用了标签栏...这可能对此有所帮助)




1
我可以保存褶皱吗?
今天,我学习了如何在Vim中折叠/展开。非常方便。 出乎意料的是,当我退出文件并重新输入文件时,我创建的折痕消失了(展开)。 在我们公司的大型项目中,有很多粘性(旧式)代码块,这些代码块已经过时但必不可少。 我真的需要几乎永久折叠它们。 有没有一种简单的方法可以告诉Vim保存我的文件折叠首选项?
13 folding 

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.