2009-05-08 22 views
15

Tôi không thể tìm thấy câu trả lời cho điều này trong bất kỳ hướng dẫn kịch bản Vim nào trực tuyến. Những gì tôi muốn làm là xây dựng một tên tập tin của một kịch bản từ các biến môi trường và sau đó nguồn nó. Và tôi muốn làm điều đó trong Vim.Vim: tìm nguồn cung ứng dựa trên một chuỗi

Nếu tôi được làm điều đó trong một vỏ Tôi muốn làm điều gì đó như thế này:

source ${HOME}/.vim/myscript_${FOO}.vim 

Làm thế nào để làm điều đó trong Vim?

Trả lời

33

Bạn có thể xây dựng một chuỗi và sau đó sử dụng thực hiện lệnh:

exec "source " . $HOME . "/.vim/myscript_" . l:foo . ".vim" 

(Các l:foo đây là một ví dụ của việc sử dụng một biến địa phương từ bên trong một hàm.)


Chỉnh sửa:

Nhưng trên thực tế, exec là quá mức trong trường hợp cụ thể này. Như rampion shows here, nhiệm vụ Ops thể được thực hiện trực tiếp với:

source $HOME/.vim/myscript_$FOO.vim 

Mặc dù vim không cho phép chúng tôi quấn tên biến gọn gàng trong ${...} như chúng ta có thể trong vỏ, trong trường hợp này chúng ta may mắn rằng HOME bị chấm dứt bởi /FOO bởi .

Nói chung, execsẽ là cần thiết nếu bạn muốn làm theo một trong các biến bởi một nhân vật không chấm dứt. Ví dụ:

exec "source " . $BAR . "_script.vim" 

sẽ chèn biến BAR, trong khi những điều sau đây sẽ cố gắng tìm một biến gọi là BAR_script:

source $BAR_script.vim  " Possibly not what you wanted! 
+0

Rất tốt, cảm ơn! –

4

Chỉ :source công trình cho tôi:

% export MYPATH='a/b/c' 
% mkdir -p $MYPATH 
% export MYFILE='temp.vim' 
% cat > $MYPATH/$MYFILE 
echo 'hello world' 
^D 
% vim 
:source $MYPATH/$MYFILE 
hello world 

Nếu bạn muốn có một số script vim tự động có nguồn gốc mặc dù, chỉ cần dính chúng trong thư mục ~/.vim/plugin/ của bạn và chúng sẽ được tải cho bạn, mà không cần phải làm điều đó bằng tay.

Từ :help expand-environment-var (mà tôi nhận được bằng cách làm :help environment và tab linh kiện cho các kết quả có khả năng đầu tiên)

 
      *:set_env* *expand-env* *expand-environment-var* 
    Environment variables in specific string options will be expanded. If the 
    environment variable exists the '$' and the following environment variable 
    name is replaced with its value. If it does not exist the '$' and the name 
    are not modified. Any non-id character (not a letter, digit or '_') may 
    follow the environment variable name. That character and what follows is 
    appended to the value of the environment variable. Examples: > 
     :set term=$TERM.new 
     :set path=/usr/$INCLUDE,$HOME/include,. 
    When adding or removing a string from an option with ":set opt-=val" or ":set 
    opt+=val" the expansion is done before the adding or removing. 

tôi có xu hướng để tìm vim tích hợp để giúp ích hơn bất cứ điều gì khác, nhưng nó có phải mất một thời gian để có được sở trường biết phải tìm gì.

+0

Có, tôi biết rằng các công trình, nhưng đường dẫn kịch bản của bạn khác nhau theo một cách rất cụ thể; bạn không nối bất cứ điều gì với biến môi trường của bạn! – Magnus

+1

(+1) Mặc dù Magnus ban đầu nói "biến môi trường", tôi nghĩ rằng ông có nghĩa là "biến vim". giải pháp của rampion làm việc cho tôi với các biến môi trường và nối. : nguồn $ HOME/.vim/myscript_ $ FOO.vim – joeytwiddle

+1

Bạn luôn có thể lưu trữ các biến vim trong các biến môi trường, nếu bạn muốn lén lút. – Zenexer

Các vấn đề liên quan