Vi & Vim

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

3
如何使正则表达式匹配器不贪心?
我正在尝试使用正则表达式替换文件中的文本(仅使用protocol / domain /替换完整的url): :%s/\(https\?:\/\/.*?\/\).*/\1/gc 不幸的.*?是不匹配字符串,甚至试图转义?量词?非贪婪量词如何在Vim中转义?


1
找出哪个插件负责按键绑定
我正要回答一个问题,但意识到我的答案取决于我已安装的插件提供的按键绑定。更糟糕的是,我不知道哪个插件提供了它。 我知道解决此问题的唯一方法是通过禁用一半并启用另一半来“二进制搜索”已安装的插件。我使用Vundle来管理我的插件,因此每次迭代仅需要我注释掉插件列表的一部分,但这仍然是一个笨拙的过程。 有没有更好的方法来确定哪个插件负责给定的键绑定?有没有办法确定给定的键绑定是否vimrc直接由我的文件提供? 我意识到Vim没有内置的插件概念,所以也许问题更确切地说是“如何确定包含vimscript的文件负责给定的键绑定?”。

1
如何在Heredoc中启用特定于语言的语法?
当我编辑PHP文件并在Heredoc中定义字符串时,如果它是JavaScript语法或HTML语法或SQL语法,则将在Heredoc内部启用语法突出显示。但是,它不适用于CSS语法。 示例(如果我们hello.php使用以下代码创建一个新的PHP文件): <?php $foo = <<<"JAVASCRIPT" var hello = "hello"; JAVASCRIPT; $bar = <<<"CSS" /* This code below should be syntax-highlighted. */ .hello { font-weight: bold; } CSS; 该JAVASCRIPT块已正确突出显示,但该CSS块未突出显示。另外,如果我在JavaScript代码块SynStack上的var关键字上运行,则会得到['phpRegion', 'phpHereDoc', 'javaScriptIdentifier'],但如果对CSS块中的任何位置进行相同的操作,则只会得到['phpRegion', 'phpHereDoc'],因此我需要添加一些CSS语法突出显示规则。这些语法规则在哪里定义,如何添加到它们中?

5
在插入模式下导航
我最终决定放弃使用箭头键进行导航,而选择hjkl。我使用Vim hardmode插件禁用了箭头键。 我习惯了快速导航,但事实证明突然无法在插入模式下导航。 有什么解决办法吗?(现有的插入模式不是解决方案)。

1
如何在vimrc中定义自定义弹出窗口/菜单
将每个有用的功能分配给键对于经常使用的工具来说效果很好,但是我很少使用某些操作,因此我宁愿将它们分配给my中定义的某些弹出菜单vimrc。 我见过像CtrlP这样的插件会打开一个弹出列表,因此应该可以实现。 所以我的问题是: 如何定义可以运行各种命令的自定义弹出菜单? 注意:这也应该在终端中运行。 X11上的CtrlP插件或dmenu之类的东西很理想,您可以在键入时细化选项,但是另一种菜单也很有用。
19 vimrc 

2
以Markdown格式打开.md文件
默认情况下,Vim以“ modula2”代码打开所有.md文件。我从未听说过modula2,也不打算使用它。 如何告诉vim始终将其foo.md视为Markdown(就像我输入过一样:set ft=markdown)?
19 filetype 

2
自动更正拼写错误
我已经启用了拼写检查功能 :set spell spelllang=en_us 现在,我可以通过键入来更正单词的拼写1z=(即,选择1st拼写更正(z=))。 每当我输入空格时,如何使它自动在前一个单词上运行而没有任何延迟?它还尝试“修复” 已经正确拼写的单词(这就是为什么我不能做类似的事情inoremap <space> <esc>mmb1z=`ma<space>),因此,我只想纠正拼写错误的每个单词。 有什么方法可以自动更正Vim中拼写错误的单词吗?


4
如何处理文本中很长的行(超过500个字符)?
对于某些文本格式,换行很重要。 例如,我经常使用Vim编写MediaWiki文档,而不能在其中将换行符放在任何地方(与Markdown不同)。所以我被迫写很多字符的行。 这可能导致较长的行(超过200个字符),甚至可能导致非常长的行(超过1000个字符)。我觉得在Vim中使用它很尴尬。一个示例是,如果我想在1000个字符行的中间进行编辑,则需要将光标移动500次。 使用w或可以使速度更快一些/,但还是很尴尬。 有更好的方法来解决这个问题吗?更好的运动键?某种“假包装”(文本的行为就像tw=80,但\n在文件中没有)还是其他某种方式?

2
在私有模式下启动Vim的最简单方法
我希望能够以私有模式轻松启动Vim。让我们将专用模式定义为一种利用以下命令的模式: set history=0 set nobackup set nomodeline set noshelltemp set noswapfile set noundofile set nowritebackup set secure set viminfo="" 让我知道您是否可以想到适用于私有模式的任何其他命令。 关键是我无法想到使用此设置启动Vim的任何简便方法。 这是我提出的一些想法: 加载.vimrcprivate而不是.vimrc 您可以简单地将所有必要的命令放入.vimrcprivate并像这样启动Vim: vim -u .vimrcprivate 定义并调用Private()函数 另一个想法是将这样的代码添加到您的.vimrc中: function Private() " set of commands here endfunction 然后就可以像这样在私有模式下启动Vim了: vim -c 'call Private()' 使用变量触发命令设置 它与第二种解决方案非常相似。只需添加 if exists('privatemode') " set of commands …


4
在vim中使用不同键盘的最便捷方法是什么?
有时我需要写希腊语单词,但是当我使用希腊语键盘时,例如,<C-p>将击打理解为<C-π>不是我想要的命令。可以用修复:map <C-p> <C-π>。我可以在不列出所有字母的情况下对所有字母执行此操作吗? PS。列出所有清单并不会产生完美的结果。例如,q是;在GR。键盘,但我们不想映射;至q。另外,由于某种原因,ZZ(zeta zeta)之后也不工作:map Ζ Z。我定义的命令\lw不能作为\λς。


1
如何使gx识别vim中的完整URL?
默认情况下,如果vim中的缓冲区包含URL(例如)http://www.google.com,则gx在正常模式下将使用该URL打开浏览器。非常方便。但是,如果URL具有URL参数(例如http://www.google.com/search?q=stuff),则将丢失URL参数(即,仅http://www.google.com/search将其打开)。 我正在使用MacVim 7.4补丁183,将Chrome作为主要浏览器(在OS X 10.9上)。 是否有一种简单的方法,最好是最少的自定义,即可gx识别完整的URL?

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.