Vi & Vim

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

1
如何定义一个在输入时正在更新的运算符?
我已经定义了一个运算符映射,该映射使用文本区域,然后要求输入字符串,然后使用输入字符串作为参数将区域与Tabular对齐。效果很好。 我已经这样实现了,使用vim-operator-user来帮助定义一个新的运算符: map \aa <Plug>(operator-align) call operator#user#define('align', 'Align') function! Align(motion_wiseness) let expr = input("align: ") if len(expr) != 0 execute "'[,']Tabularize /".expr endif endfunction function! Getchar() let c = getchar() if c =~ '^\d\+$' let c = nr2char(c) endif return c endfunction 然后我想知道是否可以在输入要与之对齐的正则表达式时动态更新它。当前方法的问题是,如果使用的表达式不正确,则必须先撤消然后重做。 对于交互式尝试,我这样做: map \== <Plug>(operator-align-interactive) call operator#user#define('align-interactive', 'AlignInteractive') …
9 vimscript 

2
在Vim中编辑目录
是否可以在Vim中编辑目录?(某些命令适用于目录)。 我想知道在Vim内部的目录中可以执行哪种操作。Vim可以打开目录进行编辑,我相信它也可以使用命令。但是通常的命令对于目录的行为有所不同。 例如,按I并输入文件名并保存目录。当我给时ls,它应该显示该文件。


1
视觉选择当前搜索结果
我已经hlsearch设置好了,但是有时它会让我觉得我在视觉上选择了搜索词,并且可以点击c更改它。 搜索的字词可能不是一个简单的字母,单词,甚至是行数-无论如何,我不想计数。 有没有办法vh(或ch说)h在当前突出显示停止之前在哪里运行?

1
单词中间的智能单词补全
考虑具有以下两行的文件: someLongFunction someFunction 当我在第二个单词的中间处于插入模式时 some|Function 我按Ctrl-n,我得到 someLongFunctionFunction 有没有一种配置Vim的方法,以便获得以下“智能”完成信息? someLongFunction

1
在操作员待定模式下更改光标形状
我在Gvim中的光标: 按下后,我在Gvim中的光标d: 在操作员挂起模式下,有什么方法可以在终端Vim中更改光标?它不必看起来完全像截图一样。 这是由Gvim 的o:hor50-Cursorin 完成的guicursor。我为Vim看到的唯一三个选项是: t_SI start insert mode (bar cursor shape) *t_SI* *'t_SI'* t_SR start replace mode (underline cursor shape) *t_SR* *'t_SR'* t_EI end insert or replace mode (block cursor shape) *t_EI* *'t_EI'* |termcap-cursor-shape| 但是关于操作员挂起模式的一切...

1
调用Shell时编码错误
我正在尝试DOT图,并尝试执行以下操作: :! dot -Tpng -oFab.png % 我收到一个错误,因为我的文件名有一个特殊字符(ó“Fabricación”中的“”): C:\windows\system32\cmd.exe /c ( dot -Tpng -oFab.png Fabricaci├│n.gv) Error: dot: can't open Fabricaci├│n.gv shell returned 2 Hit any key to close this window... 如您所见,特殊字符已更改为“ ├│”。这是Win7和NTFS下的vim和gVim 7.4,因此我假设文件名位于UTF16中。我还假设调用shell / cmd时,文件名被解释为其他某种编码(感谢Carpetsmoker指出它默认为代码页850)。 我怎样才能解决这个问题? 当然,我可以简单地重命名该文件,但是我想知道为什么会发生这种情况以及如何更正它。 更新:我刚刚在superuser.SE中发现了这个问题(感谢@ ChristianBrabandt的反馈),但似乎也无济于事。

1
如何用外部命令修改视觉选择的块?
我有一个由两个垂直部分组成的文件。在左侧,数据已经被格式化,我不想更改它。我只想在右侧格式化数据。说我有一个像这样的文件 foo=bar baz # Neato Junk quux=xyzzy # Bilbo Baggins Ring 还有更多类似的内容 我只想修改“#”字符右侧的文本。我使用以下表达式选择了所需的文本: gg /# ctrl-v G $ 但是,如果我随后尝试对其进行修改(例如使用:'<,'>!column -t),则实际上它会修改每一行的整体。仅用于修改视觉选择的零件的正确表达是什么?

1
为什么重新映射<Esc>会使光标跳转?
在.vimrc: inoremap ii &lt;esc&gt; " ii to go back into command mode 问题是,在之后ii,光标会向右跳35列。唯一会影响Esc以下内容的行: nnoremap &lt;esc&gt;&lt;esc&gt; :noh&lt;return&gt;&lt;esc&gt; 我尝试将其注释掉,但无济于事。 完整.vimrc: set nocompatible filetype off " Vundle --------------------------------------------------------------------- set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'gmarik/Vundle.vim' Plugin 'bling/vim-airline' Plugin 'vim-airline/vim-airline-themes' Plugin 'scrooloose/nerdtree' Plugin 'scrooloose/nerdcommenter' Plugin 'scrooloose/syntastic' Plugin 'freitass/todo.txt-vim' Plugin 'plasticboy/vim-markdown' Plugin 'tpope/vim-fugitive' " :GitCommands Plugin …

2
在Vim中混合大小写正则表达式替换
我经常遇到这样的情况,即我的文件中包含很多混合大小写的文件。例如, CamelCase and camelCase 我正在寻找可以替换的Vim正则表达式, AnotherCase and anotherCase 现在,在视觉上选择线之后,我分两步执行此操作, :s/CamelCase/AnotherCase/g :s/camelCase/anotherCase/g 是否可以在一个替换步骤中完成此操作,还是应该研究其他选项(例如in中的函数).vimrc?

1
带单引号数字分隔符的数字文字的Vim语法高亮
C ++ 14为我们提供了使用单引号分隔大数字文字的数字的选项。这破坏了Vim的语法突出显示。 例如,考虑以下C ++ 14程序: #include &lt;stdlib.h&gt; int main(int argc, char** argv) { // small numbers are fine int normal_number = 5; // large numbers have the correct highlighting but they're hard to visually parse int huge_number = 1000000000; // apostrophes help with visual parsing but mess up syntax …

2
理解“ [[”,“]]”,“ []”,“] [”
我发现很难理解这些文本对象的动作: *]]* ]] [count] sections forward or to the next '{' in the first column. When used after an operator, then also stops below a '}' in the first column. |exclusive| Note that |exclusive-linewise| often applies. *][* ][ [count] sections forward or to the next '}' in the first column. …

3
如何在新的vim文件中添加框架文本?
我使用Vim编写C ++,并且有很多#include&lt;&gt;语句,注释等,我必须在创建的每个新文件中包含这些语句,注释等。我已经添加 autocmd BufNewFile *.cpp r C:\(full file path of skeleton text file) 到我的vimrc,因为我听说这会创建一个缓冲区,其中包含我需要的文本。如何将该文本添加到新文件?有没有一种简单的方法可以从缓冲区执行此操作,或者有另一种简单的方法可以执行此操作?我也听说过一些有关模板插件的信息。有没有一种非常简单的方法可以为我做到这一点?

5
如何复制每行11次,将每行的最后一个“ 1”从2-12递增
我在文件中有很多行,我想将每行复制11次(将每行变成12行),并增加每行的最后一个“ 1”,以使12行从“ 1”到“ 12”,最初是“ 1”。每行中可能还会有其他出现的“ 1”,但是我要增加的“ 1”将始终是每行中的最后一个出现。另一种看待它的方法是最后一个“ 1”总是在“ / nt /”之后-像在“ / nt / 1”中一样(并且它始终是每行中唯一出现的“ / nt / 1”) 。 因此,例如,如果我有: 1stlineblahblahblah/nt/1blah 2ndlineblahblahblah/nt/1blah 3rdlineblahblahblah/nt/1blah 我想把它变成: 1stlineblahblahblah/nt/1blah 1stlineblahblahblah/nt/2blah 1stlineblahblahblah/nt/3blah 1stlineblahblahblah/nt/4blah 1stlineblahblahblah/nt/5blah 1stlineblahblahblah/nt/6blah 1stlineblahblahblah/nt/7blah 1stlineblahblahblah/nt/8blah 1stlineblahblahblah/nt/9blah 1stlineblahblahblah/nt/10blah 1stlineblahblahblah/nt/11blah 1stlineblahblahblah/nt/12blah 2ndlineblahblahblah/nt/1blah 2ndlineblahblahblah/nt/2blah 2ndlineblahblahblah/nt/3blah ... 我以前找到了命令: :for i in range(0,12) | put ='1stlineblahblahblah/nt/'.i.'blah' | …

5
如何在文件的两个模式之间替换内容?
我有以下格式的文件: &lt;common&gt; fitnes=0 genetic=1 method=0 &lt;/common&gt; &lt;inputs&gt; foo=bar bar=foo &lt;/inputs&gt; &lt;limits&gt; balance=200.00 &lt;/limits&gt; 我想删除&lt;inputs&gt;和之间的所有内容&lt;/inputs&gt;(不包括自行设置模式),并用另一个文件(例如foo.txt)中的内容替换它。换句话说,带有foo=bar和的bar=foo行将被另一个内容替换。 可能与删除多行匹配的方式类似,例如: :g/&lt;inputs/,/inputs&gt;/d 但我不确定应该替换什么d以插入另一个文件的内容,但是我想保留匹配的模式。 类似的方法是删除html标签的内部内容,例如 :/&lt;inputs&gt;/norm vitd 但是我不知道如何将文件中的内容添加到其中。 理想情况下,我正在尝试找到一种衬板,因为它将成为另一种脚本的一部分。 我该如何实现?

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.