2013-01-31 71 views
0

我想在.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。我試過了,失敗了,誰能告訴我幫忙,任何幫助表示讚賞!

回答

3

首先,有花哨的報價;你需要使用普通的(")。除此之外,: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

-1

設置路徑:

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'中使用引號。 –

0

您必須使用這個符號:

let variable_name = "value" 

,並使用直引號。

相關問題