vim:如何用〜/ .vimrc中的值替换一个变量

问题描述:

我想在.vimrc中也有类似的东西。vim:如何用〜/ .vimrc中的值替换一个变量

let dir=“/home/user/Downloads/” 
set path=$dir 
nnoremap gr :grep '\b<cword>\b' $dir/*<CR> 

上面的代码当然是错误的,但也许你可以理解我正在尝试做什么。我想将path设置为dir/home/user/Downloads/的值,并将第三行中的字dir替换为值dir。我试过了,失败了,谁能告诉我帮忙,任何帮助表示赞赏!

首先,有花哨的报价;你需要使用普通的(")。除此之外,:let没问题。

let dir = "/home/user/Downloads/" 

你可以使用:execute:set评估定义的变量,但它更容易使用:let,因为它可以改变Vim的选择,太多,用特殊的符号&{optionname}

let &path = dir 

对于映射,如果dir在运行时不更改,则最容易使用:execute。注意引用的反斜杠必须如何进行转义(即增加一倍):

execute "nnoremap gr :grep '\\b<cword>\\b' " . dir . "/*<CR>" 

所有这些信息是:help eval一部分。了解卓越和全面的帮助是如何构建的;所有的信息都在那里(你只需要知道如何找到它)!

+0

谢谢,但是当我尝试用** vim **替换** grep **命令时,发生错误。 'exe“nnoremap gf:vim/\\ b \\ b /”。 dir。 “/ **/* ”',我很困惑为什么上面的代码是错误的。你能告诉我吗?非常感谢! – Searene

+0

什么样的错误?请更精确。一个问题是'\ b'在Vim中意味着不同。使用'/ \\ \\> /'。 –

+0

如果我写为你的:'exe“nnoremap gf:vim/\\ \\> /”。 dir。 “/ **/* ”',vim说*** E480:没有匹配:\ \> ***,如果我按照我在评论中所说的那样写:'exe“nnoremap gf:vim/\\ b \\ b /“。 dir。 “/ **/* ”',vim说*** E480:不匹配:\ b \ b ***,当前单词是“type.h”(并且光标位于字母'e' ),我可以通过命令“exe”nnoremap gf:vim/type /“找到*** ***类型的单词。 dir。 “/ **/* ”',所以我想也许vim认为要搜索的单词是字符串***“\ b \ b”***,而不是当前单词*** type *** – Searene

设置路径:

set path=/home/user/Downloads/ 

或目录附加到路径。

set path+=/home/user/Downloads/ 

Path是一个Vim变量,如果您只打算将它用于此重映射,那么该变量似乎不太合适。最好声明自己的变量,因为路径中也可能有许多目录,这些目录不能用于grep。

let g:search_path="/path/to/your/dir" 

nnoremap gr :grep '\<<cword>\>' <C-R>=eval("g:search_path")<CR> 

按Ctrl + R让我们插入一个寄存器在这里,当再使用它来调用表达式寄存器,我们用它来评估g:search_path

查看:help expr-register了解更多!

这将会在每次执行映射时评估您的g:search_path变量,允许您更改路径并且不必每次都重新映射gr

+0

我想,问题的关键是如何使用变量'dir'而不是在字符串中指定路径。 –

+0

是的,我有点仓促,我很抱歉。 –

+0

而且你不会在':set'中使用引号。 –

您必须使用这个符号:

let variable_name = "value" 

,并使用直引号。