Làm cách nào để tôi có thể đọc .vimrc từ một tệp bên ngoài?


24

Tôi muốn sửa đổi .vimrcđể đọc giá trị của biến từ tệp bên ngoài. Tôi có thể làm cái này như thế nào?

Cụ thể, một người bạn và tôi chia sẻ một git repo với các .vimtệp của chúng tôi , nhưng có một vài khác biệt nhỏ trong những gì chúng tôi muốn trong cấu hình của chúng tôi. Vì vậy, hầu hết các tệp là phổ biến, nhưng chúng tôi sử dụng các câu lệnh if để xác định xem có tải các phần dành riêng cho người dùng hay không, như sau:

let whoami = "user2"
if whoami == "user1"
...

Sau khi kiểm tra chung .vimrcngoài kiểm soát nguồn, mỗi chúng ta phải thay đổi let whoamibài tập để phần riêng của chúng ta sẽ được tải. Thay vào đó, tôi muốn giữ một tệp riêng biệt, có thể khác nhau cho mỗi chúng ta và từ đó vim sẽ tải giá trị biến đó.

Có lẽ một góc độ khác về điều này là: Liệu vim sẽ tự động đọc tất cả các tệp trong .vimthư mục của tôi ? Nếu vậy, mỗi chúng ta có thể đặt một liên kết tượng trưng trong đó được gọi là username.vim và liên kết nó với một tệp bên ngoài sẽ khác nhau đối với mỗi chúng ta.

Câu trả lời:


35

trong tệp .vimrc chính của bạn:

source otherVimScriptFilePath.vim

sau đó chỉ cần đặt câu lệnh biến của bạn trong tệp đó:

" otherVimScriptFilePath.vim
let whoami = "user1"

2
FYI - Trong tình huống của tôi, thật hữu ích khi thực hiện let whoami = ""ngay trước sourcedòng, để nếu không tải được tệp bên ngoài, biến tồn tại và tôi nhận được thông báo lỗi mà chúng tôi đã thiết lập trước đó cho biến không được đặt.
Nathan Long

2
@GorillaSandwich: Tôi sử dụng điều này để lấy nguồn vimrc của mình trên máy windows của mình vì windows không có liên kết tượng trưng. Tôi có một thư mục SVN chứa tệp này và tất cả các tệp chấm khác của tôi. Vì vậy, tôi chỉ có một _vimrc nguồn thực sự trong thư mục svn.
Robert S Ciaccio

@GorillaSandwich: xem câu trả lời của tôi cho silent! sourcemột phần
akira

6

Sử dụng thử / bắt

Kể từ khi đặt câu hỏi này, tôi đã đưa ra một trường hợp sử dụng khác để tải một tệp bên ngoài: các chỉnh sửa dành riêng cho máy.

Vì tôi có thể hoặc không cần thực hiện các chỉnh sửa trên một máy nhất định, tôi đang sử dụng a try/catchđể tải tệp bên ngoài; nếu không có tập tin nào như vậy, tôi sẽ để nó thất bại trong âm thầm.

" If there are any machine-specific tweaks for Vim, load them from the following file.
try 
  source ~/.vimrc_machine_specific
catch
  " No such file? No problem; just ignore it.
endtry 

5

Để trả lời câu hỏi cuối cùng, các tệp trong ~/.vimkhông được tải tự động, nhưng tất cả các tệp trong đó ~/.vim/pluginlà.


2
và một số địa điểm khác bên dưới ~ / .vim ( after, autoload)
akira

4

Bạn có thể yêu cầu ~ / .vimrc tải một tệp khác bằng :sourcelệnh. Ví dụ: mỗi bạn có thể đặt các lệnh duy nhất của mình vào ~ / .myvimrc và tải các lệnh đó bằng

source ~/.myvimrc

Hoặc, như bạn đã nghĩ, mỗi người có thể đặt tên của bạn trong tệp đó như thế này:

let user = "user1"

và sau đó đặt cái này vào ~ / .vimrc:

source ~/.myvimrc
if user == "user1"
    " do this
elseif user == "user2"
    " do that
else
    echo "Invalid user"
endif

Tuy nhiên, thay vì đặt tên của bạn trong các tệp, bạn có thể sử dụng $ USER như akira đề xuất hoặc đặt userbằng cách sử dụng whoami, như thế này:

let user = substitute(system('whoami'), '\n', '', '')

Hàm thay thế () là cần thiết vì đầu ra của system () thường có dấu '\ n' được xử lý ở cuối.


whoamikhông hoạt động trên windows
akira

@akira: Đúng, nhưng GorillaSandwich đang sử dụng Unix, không phải Windows. $ USER không hoạt động với Windows, ít nhất là không phải Windows XP.
garyjohn

chỉ cần nói, trên cửa sổ $ USERNAME của nó. ý chính là: whoamisinh ra một quy trình mới, khi bạn mở trình soạn thảo của mình, nó sẽ nhanh và không (vô dụng) làm việc nhiều lần nữa.
akira

2

tên của người dùng đã đăng nhập có sẵn trong biến môi trường $ USER. bạn có thể truy cập biến đó một cách dễ dàng:

:echo $USER

vì vậy, chỉ cần sử dụng

execute "silent! source vimrc." . $USER

trong vimrc của bạn và đặt cài đặt cụ thể cho người dùng của bạn vào

vimrc.joe

hoặc bất cứ tên đăng nhập của bạn là gì


0

Tôi không chắc vimrc của bạn trông như thế nào nên điều này có thể không khả thi, nhưng nếu có những phần lớn mà bạn và bạn của bạn chia sẻ, bạn có thể muốn chia chúng thành các plugin riêng biệt. Bạn có thể thêm tệp vào ~/.vim/pluginthư mục để tải chúng khi khởi động. (Chúng được tải theo thứ tự bảng chữ cái - sử dụng :scriptnamesđể kiểm tra.)

Bằng cách đó, mỗi bạn có thể có một vimrc hoàn toàn độc đáo, nhưng tất cả các cấu hình phổ biến của bạn đều nằm trong các plugin. Nếu bạn chia nhỏ chúng một cách hợp lý, thì nó cũng dễ dàng chia sẻ với người khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.