Vi & Vim

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

1
为什么换行符在搜索寄存器中转换为Null字符,并在命令行转换为回车符?
如果我有以下文字: foo bar 我从视觉上选择它并复制它。 现在,该文本存储在未命名的寄存器中",这是其内容(的输出:reg "): "" foo^Jbar^J 根据此图表,似乎^J是换行符的插入符号。 如果要a通过键入:let @a = @" 以下内容在寄存器中复制未命名的寄存器:这是其内容(的输出:reg a): "a foo^Jbar^J 它没有改变。 如果现在我输入:let @/ = @",将其复制到搜索寄存器中,则其内容为的输出:reg /: "/ foo^@bar^@ 根据上一张图表,它似乎^@是Null字符的插入符号。 为什么换行符会自动在搜索寄存器(而不是a寄存器)内转换为Null字符? 如果我在命令行上(或之后的搜索中/)插入未命名的寄存器,则通过输入:<C-R>",将插入以下内容: :foo^Mbar^M 同样,根据最后一张图表,这^M似乎是回车符的插入符号。 为什么在命令行上将换行符自动转换为回车符? 编辑: 通常,您可以通过键入以下内容来插入文字控制字符: <C-V><C-{character in caret notation}> 例如,您可以<C-R>通过键入插入文字<C-V><C-R>。 您可以为看似任何控制字符执行此操作。 但是,我注意到我无法在缓冲区内或命令行上插入文字LF,因为如果键入:<C-V><C-J>它会插入^@,空字符而不是^J。 是否出于相同的原因将LF在搜索寄存器中转换为NUL? 编辑2: 在中:h key-notation,我们可以阅读以下内容: <Nul> zero CTRL-@ 0 (stored as …


1
动态完成
我正在尝试增强旧的完成功能。我希望在输入新字符时更新弹出菜单中显示的选择 我的完成功能是 function! lh#icomplete#ecm(findstart, base) abort if a:findstart let l = getline('.') let startcol = match(l[0:col('.')-1], '\v\S+$') if startcol == -1 let startcol = col('.')-1 endif " let g:debug+= ["findstart(".a:base.") -> ".(startcol)] return startcol else " let g:debug += ["matching(".a:base.")"] let words = ['un', 'deux', 'trois', 'trente-deux', 'unité'] call filter(words, …

2
从光标删除直到第一个字符x(跨多行)
我知道我可以从光标中删除,直到并包括一个字符x的第一次出现dfx。这仅适用于一行。当x不在同一行中时,如何从当前光标位置删除直到x第一次出现? 例如,如果光标在中的第一个空格之后 yada yada yada yada yada yada yada yada yada yada x 我输入dfx的结果需要是: 亚达

3
动作映射
我试图了解如何在映射内的后续运动中使用运算符。例如: nmap /c c{here we pending for a motion}/<C-r>"<CR> 该地图应执行以下操作: 激活c操作员并收听下一个动作; 例如,我可以在此处键入t,以在下一个逗号之前更改所有内容; 进入插入模式,删除光标和逗号之间的所有内容; 删除的文本会自动搜索为图案 简而言之,删除运动文本后,我将处于插入模式,突出显示了已删除的文本。如果有人帮助我解决这个问题,我将不胜感激。 更新 答案几乎是我想要的。但!当我按时/cw,键入一些东西而不是单词,然后按<Esc>。我希望以后再做同样的事情。但是,在n(转到下一个出现)和.(重复上一个命令)之后,它只是在最后键入的文本之前加上了替换而不是替换它。映射的主要目标是将其与n/N和.重复使用。我错过了什么吗?

3
在Vim中突出显示了撤消
我正在尝试在Vim中突出显示撤消操作,例如spacemacs默认配置。有时候,当我想要快速撤消操作时,我无法意识到更改是因为它是瞬时的。因此,当我按一下撤消按钮时,我会尝试这样的操作: 有人知道如何在Vim中执行此操作吗? (我已经有了Gundo插件,我只想使默认的undo更流畅) 编辑:该undotree插件不工作(Gundo并不突出的变化),只需使用UndotreeToggle命令,将被高亮显示在文件中的所有未来的变化。

2
在正常模式下,j,CTRL-J,<NL>和CTRL-N有什么区别?
我在网络上的某个地方看到有人在使用Ctrl-J,由于不知道该映射,我在相关文档中进行了查找,发现以下内容: j or &lt;Down&gt; or CTRL-J or &lt;NL&gt; or CTRL-N [count] lines downward linewise. 这使我想到几个问题: 什么是&lt;NL&gt;:我认为它等同于,&lt;CR&gt;因为Enter默认情况下按会在正常模式下下降一行,但为什么&lt;NL&gt;在这里而不是&lt;CR&gt;呢? 这些映射之间有什么区别:所有这5个选项是否都以相同的方式向下一行?根据我的测试,我会回答“是”,但这将导致下一个问题。 为什么会有5个映射做完全相同的事情:我能理解这一点j,&lt;down&gt;并且保留给不习惯vim映射的用户使用,但是为什么存在其他映射呢? 什么时候比另一个使用更有趣:这是上一个问题的延续:如果有太多可能性,我猜想它们有不同的优势或者更适合在特定的用例中使用。这些用例是什么? 我觉得这些命令的冗余就更奇怪了,当我看到:h k:只有3个办法上去:k,&lt;UP&gt;和ctrl-p。因此,奖金问题是:为什么会有5种下降的方式而只有3种上升的方式?

1
如何在.vimrc中使用敏感数据?
我想让我的.vimrc通过github同步,因此它必须是公共文件,但同时我必须在其中放入一些敏感数据(例如dbext.vim的db密码/主机),而不能将它们泄露给其他。最好的方法是什么,怎么做?
12 vimrc  security 

2
如何在Vim中查找LaTeX符号?
我可以将某种形式的符号补全集成到Vim吗?像TeXMaker这样的专用TeX编辑器提供了要完成的符号列表(例如,\al显示带有\alpha,\lashows \lambda和的列表\langle)。 请注意,TeX包含大量符号,因此涉及手动映射\al到的\alpha建议将毫无用处。 我拥有的相关插件: SUPERTAB与let g:SuperTabDefaultCompletionType="context"和 set omnifunc=syntaxcomplete#Complete 乳胶盒 如果有关系,我可以使用XeLaTeX进行编译。 有关: 如何查找符号或识别数学符号或字符?

1
如果我使用:bwipeout会发生什么不好的事情?
我刚刚发现了:bwipeout命令,其:help状态如下: 类似于:bdelete,但实际上删除了缓冲区。与缓冲区有关的所有内容都将丢失。该缓冲区中的所有标记都将变为无效,选项设置将丢失,等等。除非您知道自己在做什么,否则请不要使用它。 除了显而易见的以外,我不清楚使用此命令的不利之处。 当我下次打开有问题的文件时,我的选项设置几乎总是会重置为相同的值,而丢失标记似乎也并不意味着不祥的警告:“除非您知道自己在做什么,否则请不要使用它。” “等”中包括什么?如果我没有预见到什么后果,会导致什么可怕的后果?
12 buffers 

1
防止Vim记录某些文件类型的事件
为了增加这个stackoverflow问题,应该输入哪些内容.vimrc来确保“私人编辑”某些文件扩展名(例如.gpg文件)。 在不影响会话效率的情况下,不应保存任何有关已完成工作的信息,包括寄存器,搜索历史记录,命令历史记录,视图,交换等。对于gpg文件,可以使用此vim插件,但是除了编辑插件外,如何可以将这些讨论的思想扩展到任意文件类型吗? 我们可能会使用以下命令, if &lt;ft in privacy_ext_list&gt; set noswapfile set noundofile set viminfo= endif 但是除了适当的条件语句之外,还缺少什么? 此外,Vimscript是否有办法制作一个文件扩展名数组,然后评估当前文件类型是否在该数组中?

3
如何使窗户恢复为网格状?
如果我将窗口划分为四个象限,则从以下命令序列开始: :tabnew :vsplit :split &lt;C-W&gt;l :split 然后输入如下命令&lt;C-W&gt;J将使它们不再是正方形的;在这种情况下,它将迫使一个窗口在底部浮动。 我该如何做相反的工作-即迫使窗户重新成正方形? 我已经看过,:help window-moving但没有发现有用的信息。

3
UI个性化vimrc,而无需从头开始编写
Vim具有无限的可配置性。但是,设计vimrc对于新手和中级用户来说是一项艰巨的任务。基本上,您应该通过阅读文档并从其他用户那里获得偶然的技巧,从头开始开发一个。 是否有直观的配置菜单来帮助初学者生成和修改vimrc?也许是基于Web的工具,或者类似于文字处理器中的选项对话框的工具?
12 vimrc  options 

4
如何安全撤消可能已做或可能未做的更改?
我经常在输入错误的窗口时犯错误(使用USB身份验证器已经这样做了几次)。在启用了许多热键的程序(Gmail,VLC,Vim)中,这经常会带来意想不到的后果,即进行了不必要的修改。 有时,我可以跟踪自己的步骤,并记起我键入的内容,以修复任何更改或恢复我早日发现的调整设置。不幸的是,并非总是如此。 在Vim中,我可以像改变一行容易撤消的文本一样无害而明显。或者,我可能在不知不觉中修改了一些不易识别的内容。如果我不小心在Vim中键入了一系列不需要的命令,该如何检查和撤消对设置的任何编辑或更改?
12 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.