Vi & Vim

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

2
是否可以在Vimscript中使用委托或将函数作为参数传递?
我正在尝试创建一个小的插件来学习vimscript,我的目标是创建一些函数来处理选定的文本并将其替换为结果。该脚本包含以下各项: 两个处理文本的函数:它们将字符串作为参数,然后返回该字符串,该字符串应用于替换原始文本。目前,我只有两个人,但不久之后可能还会更多。 获取所选文本的函数:只需拉动最后的选择并返回它。 包装函数:调用处理函数,获取其结果并将该结果替换为旧选择。 现在,我的包装器函数如下所示: function! Wrapper() " Get the string to insert let @x = Type1ProcessString(GetSelectedText()) " remove the old selection normal gvd " insert the new string normal "xp endfunction 我必须创建第二个包装器,将第3行替换为 let @x = Type2ProcessString(GetSelectedText()) 我想给包装器函数一个参数,该参数包含要执行并在第3行中使用通用调用的Process函数。现在,我尝试使用call不同的方法,例如: let @x = call('a:functionToExecute', GetSelectedText()) 但是我并没有真正取得成功,:h call也没有对委托主题真正有所帮助。 总结一下,这是我的问题: 我如何只为所有处理函数提供一个包装函数? 在vimscript中有什么可以充当代理的吗? 如果不存在代表,那么做我想要的事情的“好”方法是什么?

3
随着语法的开启,Vim随着时间的流逝而变慢
syntax on使用Vim时我可以做些什么来保持? 一打开实质性内容,过一会儿几乎就无法编辑。每次按键都会导致延迟。如果我关闭了语法高亮显示功能或重新启动了vim,那就可以了。 我将其synmaxcol设置为120。示例ruby文件只有59行,且不超过80个字符。 我正在使用vim-ruby和vim-rails。 问题在于,延迟似乎会随着时间而累积。当我从头开始打开文件时,就可以了。一段时间后,它变得越来越慢。

3
使命令行模式键入<Esc>和Ctrl命令
假设您要引用以下单词。如果|光标位置是您,则可以cw""&lt;Esc&gt;P从普通模式轻松引用该单词。 |below 我想在命令行模式下实现相同的行为。我的问题是我该如何对命令行模式说我要输入&lt;Esc&gt;。我想:norm cw""&lt;Esc&gt;P和其他一些变化,但我刚刚得到""&lt;Esc&gt;P的不是"below"。 仍然与此相关,我想知道如何使命令行模式键入Ctrl命令。例如,我可以cw"&lt;C-r&gt;""&lt;Esc&gt;改为引用上述单词。但是然后我需要命令行为&lt;C-r&gt;我输入。我怎样才能做到这一点?

4
如何直接运行javascript并显示输出?
我只是在没有DOM操作的情况下使用JavaScript语言功能进行了一些测试。所以我正在编辑一个js文件,我想知道如何简单地运行它并显示控制台输出?我安装了moll / vim-node插件,但不知道如何运行js代码。

1
如何将行缩进量更改为特定值?
很多时候,我遇到了缩进不正确的情况。通过粘贴,不良/不受欢迎的缩进插件,或者通常是多余的空格来抵消缩进值,以太。我通常会按此方式&lt;&lt;或&gt;&gt;几次将其修复以对其进行修复。在多余的空格的情况下,我会做一个100&lt;&lt;再&gt;&gt;对每个缩进级别其实我是想。 问题是,就像|允许您按数字设置列的动作一样,10|将光标移至第10列。如何指定缩进级别? 以下示例(无效)shiftwidth=4 expandtab: The quick (indent level 0) ••••Brown Fox (indent level 1) ••••••••••Jumped over the lazy dog (indent level 2 with two extra spaces) 在这种情况下,我目前必须计算最后一行(2)的缩进级别,并为多余的空格添加一个3&lt;&lt;缩进级别,然后键入然后计算我当时1&gt;&gt;(或使用autoindent和==命令)的缩进级别。 我正在要求1==将缩进设置为1级缩进。或者在某些情况下0==,一起删除缩进。 我意识到上面的示例确实分别在1或0行上进行了自动缩进,因此无法满足我的要求,但希望它能更好地说明问题。


2
在运行时快速切换字体
虽然可以从GVim菜单中手动选择字体,但我还是要根据手头的任务在一些首选字体之间进行切换(小位图,大OTF等)。 有什么方法可以设置键绑定来循环浏览vimrc中预定义的字体列表?

4
:在光标之后而不是在行之后读取
我:r !uuidgen经常使用新的uuid插入缓冲区。这可行,但我通常试图在引号之间插入uuid,并:r !uuidgen在新行上打印uuid。 为了解决这个问题,我目前正在使用一个简单的键盘映射: nnoremap &lt;C-u&gt; mm:r!uuidgen&lt;CR&gt;dW"_dd`mp 此宏设置标记mm,插入uuid r!uuidgen,删除插入的uuid dW,删除多余的行"_dd,返回标记BACKTICKm,最后粘贴uuid p。 :r在没有此宏/键绑定的情况下,是否有一种方法可以将光标移到游标之后呢?

1
在插入模式下映射字母序列
我已经可以在插入模式下映射组合键: :inoremap abc &lt;do stuff&gt; 但是,这有一些缺点: 在键入序列的部分版本(例如)时ab,实际上不会在短时间内显示字符,因为这是在“等待”以查看是否要键入完整命令。这是不可取的。如果要输入字母的部分子字符串,我想映射一个字母链而不暂停。 如果键入ab,则暂停(并等待直到字符实际上如上述指出那样出现),然后键入c,命令将不会执行。我希望无论等待多长时间都可以执行命令。 我会使用iab,但是那是行不通的,因为: 它需要在字符串后输入一个空格 我不能用它执行任意命令,只能插入文本字符串。 如果在插入模式下输入了某个字符串而没有使用映射,是否有任何方法可以执行命令或击键(映射会在每次键入an时烦人地暂停a,而等待时间过长则无法工作)?


5
浏览多个文件
如果我开VIM与命令行上的多个文件,例如vim debug.log*其负载debug.log,debug.log.1并且debug.log.2,可以予它们之间导航,将它们分配到多个窗口(:split/ :vsplit)或这样的? 对于这种操作模式,我知道的唯一快捷方式是:n,它将在列表中加载下一个文件。在这种多文件操作模式下,我还能做什么?(或哪个帮助主题涵盖了这一点?)

2
是否可以使用vim的clientserver功能保持设置同步?
我通常在同一台计算机上运行多个vim实例。当我对vimrc进行更改时,我可以:source ~/.vimrc(使用简单的映射或autocmd)。但是为了使所有正在运行的实例反映出更改,我必须分别在每个实例中运行该更改。我可以使用该clientserver功能告诉所有实例重新加载我的vimrc吗? 我也会对不使用的解决方案感兴趣clientserver。

2
如何使用Vim的“智能引号”进行拼写检查
有“常规”直引号: “ 并且您有一个成角度的“智能引号”: ''“” Vim的拼写检查使用“直”引号,但不能使用天使引号,因此这被认为是“错误”: 这是... Monty Python的 即使不是。 屏幕截图,以防您的字体没有区别: 我该如何解决?我希望让它同时适用于两种变体。

2
如何在Vim启动时执行命令
我刚刚为python安装了一个显示方法树的插件。因此,我想在启动时打开树,因此不必每次打开某些.py文件时都按下按钮。但是,我希望仅对.py文件执行此命令。这是我的vimrc片段的样子: nmap &lt;F8&gt; :TagbarToggle&lt;CR&gt; 有一种方法在启动时仅对.py文件执行此命令吗?

2
“文件类型插件”的真正作用是什么?
我知道它会加载ftplugin.vim文件,但是它实际上是做什么的?是否设置选项(取决于文件类型)? 如果我要在vimrc的开头加入这一行 filetype plugin indent on 然后我在这行之后设置了一些选项(例如autoindent,smartindent等),它会与它们混淆吗?我怎么知道哪些选项受文件类型插件或缩进文件的影响?
11 filetype 

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.