Vi & Vim

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


5
如何在某些语法区域中搜索模式?
我正在使用vim编辑乳胶文档。通常,我会想要将变量的名称更改为其他名称。但是,当我搜索变量名称时,必须经过不相关的匹配项有点烦人。我只想在tex语法文件中定义的“数学区域”中搜索。有没有一种简单的方法可以将搜索限制到特定的语法区域?
10 search 

1
从给定行到文件末尾删除与模式匹配的行
如果我的文件中包含很多注释,并且我想删除从第3行到文件末尾的所有注释,那么最好的方法是什么? 我被困住了,因为我第一次尝试的事情似乎并没有达到我想要的效果: :3,$/^#/d 与其查找模式并删除从3到文件末尾的行,不如从3到通过与该模式匹配的行删除所有行,然后停止。 因此,如何将ex命令应用于一系列行。在这种情况下,它到文件的末尾,但是如果我要对一个标记进行编辑,还是在第10行和第20行之间或其他范围内,它会有所不同吗?
10 ex-mode 


1
为什么我的vimrc中的自定义突出显示被清除或重置为默认值?
我想用突出显示我的状态行(的一部分)%1*,例如: set statusline=%1*%f%0* highlight User1 ctermbg=0 ctermfg=10 cterm=bold 但是,它始终显示为“空”(默认的端子颜色): 如果键入:highlight User1,则显示User1 xxx cleared,如果:highlight User1 ctermbg=0 ctermfg=10 cterm=bold在命令窗口中键入,它似乎可以正常工作。 如何将其放入.vimrc文件中? 我用于测试的完整vimrc文件: set nocompatible set background=light colorscheme default set laststatus=2 set statusline=%1*%f%0* highlight User1 ctermbg=0 ctermfg=10 cterm=bold

2
如何以vi方式使用命令行模式?
在始终保持原始位置的情况下,是否可以与命令行模式进行交互? 特别地,以下两个操作很麻烦,需要将手指移至箭头键,有时更糟的是鼠标。 四处走动:是否有一种方法可以在命令行模式下在往常位置上来回移动? 如何在命令行上复制和粘贴?我的意思是将两者都从命令行本身的一部分复制到另一部分,或者从文本甚至剪贴板复制。

3
在选择或匹配项的每行中插入一个递增数字
我有一个问题,我可以想到两种通用的解决方法,但是我不知道这两种方法的具体细节。 ... Level 1: cũng also Level 1: và and Level 1: như like; such as Level 2: các plural marker Level 2: của belonging to ... 对于以“ Level n”开头的每一行,我想插入一个以“ 01”开头的数字。为了简单起见,让我们在数字前加上数字。 方法1:手动选择同一级别的所有行。调用魔术,我很快就会学习。 方法2:编写搜索并替换,以给定级别匹配所有行,在每个匹配项中,替换文本中均包含一个数字,该数字在每个匹配项中增加1。 我在StackOverflow或其他Vim站点上发现了类似的问题,但每个问题似乎都具有以下一个或多个问题: 关于插入当前行号,而不是插入任意但递增的号码。 不要将数字零填充。 在Windows 7上运行的Vim 7.4上的选择实际上不起作用(这些都会导致错误E481: No range allowed。) 我在Windows中使用mswin.vim运行gVim,但是最好在所有自定义Vim安装中使用的解决方案是最佳的。
10 macro  replace 


3
如何写一个fold-expr?
我已经阅读了有关fold-expr(:h fold-expr)的帮助页面,但没有解释表达式中使用的语法。 有四个示例: :set foldexpr=getline(v:lnum)[0]==\"\\t\" :set foldexpr=MyFoldLevel(v:lnum) :set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1 :set foldexpr=getline(v:lnum-1)=~'^\\s*$'&&getline(v:lnum)=~'\\S'?'>1':1 我知道这v:lnum是需要缩进级别的行,表达式2是对函数的调用。 表达式1、3和4呢?有人可以向我解释一下吗?
10 folding 

2
如何从命令行将整个缓冲区写入标准输出?
我想将整个缓冲区/dev/stdout而不是文件写入标准输出(),并且以下命令在编辑文件时按预期工作: :w >> /dev/stdout 提示:按Control+ L刷新屏幕。 但是,当我尝试从命令行(非交互式)执行相同操作时,它无法按预期工作,例如: $ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!' Vim: Reading from stdin... 与同:w !tee,:x! /dev/stdout,:%print和类似的。 退出之前,这是说:[Device] 1L, 17C appended。 有什么办法迫使vim在管道中间将标准输入写入标准输出?也许以某种方式缓冲了吗?


1
如何在Vim中合并两个词典?
我有两个决定: :let defaults = {'hello': 'world', 'bye': 'jupiter'} :let override = {'hello': 'mars'} 如何合并来自的键,override以便最终得到一个新的字典,如下所示: {'hello': 'mars', 'bye': 'jupiter'}

2
将最后一个动作(。)保存在宏中
用例 我处于正常模式。我没有明确考虑录制宏,但是我只做了一个命令更改。现在,我可以使用点重复此操作。 我现在意识到,将其保存在宏中以便以后使用,而不是每次都键入整个命令是一个有用的动作。我现在可以通过使用点来进行所有需要此命令的更改,或者可以继续编辑并稍后通过将其保存在宏中来使用此命令。 后者是我要执行的操作,但是想到的最简单的方法并不容易-撤消更改,开始记录宏并重新键入命令以进行所需的更改,然后停止记录宏。 到目前为止,我尝试过的是: 在宏中记录点不起作用,因为它记录点而不是点执行的更改。(例如,假设存储在dot中的命令是:d5w如果您开始记录宏并通过进行操作,希望每次运行该宏都会删除5个字,那么这种情况就不会发生。下次运行宏将执行点运算而不是命令执行d5w,这意味着,如果您在录制宏后进行了其他更改-说使用3个字进行删除d3w,这是您执行的最后一次更改,那么当您运行宏时,它将删除3个字单词而不是5,因为它只是在运行.)

1
为什么:bd#在不存在备用缓冲区的情况下删除当前缓冲区?
这是我重现观察到的行为的方式。 首先,我输入以下命令: echo aaaaa > a vim a 在Vim中,我输入以下命令: :ls :e # :echo bufname('#') 这是以上三个命令的输出: :ls 1 %a "a" line 1 :e # E194: No alternate file name to substitute for '#' :echo bufname('#') 该bufname('#')命令不产生任何输出。 现在我输入以下命令: :bd # 当前缓冲区被删除,并用“ [No Name]”缓冲区代替: :ls 2 %a "[No Name]" line 1 我期待E194在执行时得到错误:bd #。为什么要删除当前缓冲区呢? …

1
在Vim中工作时如何编辑Vim配置?
我是Vim的新手,我希望能够在仍然使用Vim的同时使用键盘绑定和其他Vim设置来编辑脚本。 例如,我希望所有的大多数set xx命令都在一个文件中,并且能够在仍在Vim中的同时更新文件并重新应用其设置。是source在编辑文件时-ing文件的问题吗?
9 vimrc  set 

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.