Làm cách nào để cài đặt VIM phụ thuộc vào máy tính trong .vimrc?


44

Tôi chia sẻ tập tin cấu hình VIM của tôi giữa một số máy tính. Tuy nhiên, tôi muốn một số cài đặt cụ thể cho một số máy tính nhất định.

Ví dụ: kích thước phông chữ trên máy tính xách tay độ phân giải cao phải khác với máy tính để bàn có độ phân giải thấp. Và quan trọng hơn, tôi muốn gVIM trên Windows hoạt động nhiều cửa sổ hơn và MacVim trên OSX để hành xử sai lầm hơn và gVIM trên Linux để hành xử như mọi khi. (Đó có thể là một tình cảm kỳ lạ, nhưng tôi rất quen chuyển đổi chế độ tinh thần khi chuyển đổi hệ điều hành)

Có cách nào để thực hiện một vài cài đặt trong .vimrcmáy hoặc phụ thuộc vào hệ điều hành không?

Câu trả lời:


44

Phát hiện hệ điều hành trong .vimrc:

if has('win32')
    ......
elseif has('mac')
    ......
elseif has('unix')
    ......
endif

4
Cũng hữu ích: has('gui_running')nếu bạn cần phân biệt giữa chế độ tty và chế độ GUI.
Chris Johnsen

10
Hàm has () kiểm tra sự hiện diện của các tính năng Vim. Không có tính năng 'linux'. Đối số thích hợp là "unix". Ngoài ra, đối số phù hợp cho OS-X là 'macunix'. Ngoài ra còn có một tính năng 'mac', nhưng tôi không biết liệu điều đó has('mac')đúng với tất cả các máy Mac hay chỉ là máy Mac trước OS-X. Xem :help feature-listđể biết danh sách đầy đủ.
garyjohn

1
Vâng, has('unix'). Lỗi của tôi.
thường

Một câu trả lời rất muộn, nhưng đúng, có ('mac') kích hoạt trong OSX cho tôi.
Diablo-D3

1
Tôi đã thử nghiệm vim 1) đi kèm với OS X và 2) mà tôi đã cài đặt qua Gentoo Prefix (một cái gì đó tương tự như Homebrew) và 3) đến từ MacVim. Chỉ có một đến từ MacVim sẽ trả lại đúng cho has("mac"). Tôi đoán là họ đã sử dụng một số bản vá thực sự làm cho tính năng kiểm tra hoạt động. Nếu bạn dựa vào has("mac")kiểm tra, hãy thực hiện một số thử nghiệm để đảm bảo rằng nó được hỗ trợ trên vim của bạn.
yegle

26

Để kiểm tra một máy cụ thể, bạn có thể kiểm tra đầu ra của hostnamelệnh. Ví dụ,

let hostname = substitute(system('hostname'), '\n', '', '')
if hostname == "tigger"
   ...
elseif hostname == "pooh"
   ...
endif

Bạn cũng có thể kiểm tra giá trị của các biến môi trường có sẵn:

if $HOSTNAME == "tigger"
   ...
elseif $HOSTNAME == "pooh"
   ...
endif

Các $DISPLAYbiến cũng có thể hữu ích.


13
hostname () sẽ thực hiện việc này, ví dụ: if hostname () == 'tigger' ..., mà không phải thực hiện cuộc gọi hệ thống.
tvon

Kết quả system('hostname')machine.mycompany.com\n, vì vậy tôi phải thay đổi lệnh thay thế thành substitute(system('hostname'), '\.\_.*$', '', '').
JPaget

9

Tôi có đoạn trích này trong vimrc:

let s:host_vimrc = $HOME . '/.' . hostname() . '.vimrc'                                                                                                                               
if filereadable(s:host_vimrc)                                                                                                                                                        
  execute 'source ' . s:host_vimrc                                                                                                                                                   
endif

Điều này chỉ đơn giản là thực thi source $HOME/.$HOSTNAME.vimrcnếu nó tồn tại. Tôi đã sử dụng hostname()và ghép nối, bạn cũng có thể sử dụng ngắn gọn hơn expand('$HOME/.$HOSTNAME.vimrc')nếu bạn biết rằng $HOSTNAMEnó luôn được đặt.


7

Câu trả lời trước về phát hiện hệ điều hành không phát hiện ra OS X trong MacVim đối với tôi (và cũng không sử dụng has("macunix")như tài liệu cho thấy nên như vậy).

Đây là những gì tôi sử dụng để phân biệt giữa Windows và OS X:

if has("win32")
  "Windows options here
else
  if has("unix")
    let s:uname = system("uname")
    if s:uname == "Darwin\n"
      "Mac options here
    endif
  endif
endif

Lưu ý rằng nó has("win32")hoạt động với tôi, ngay cả trong Vim 64 bit trên Windows 64 bit.

Bạn cũng có thể sử dụng các thử nghiệm tương tự unametrong if has("unix")khối để phân biệt các hương vị khác của Unix. Chỉ cần chạy unamehoặc uname -atừ dòng lệnh để xem những gì bạn cần so sánh s:uname with. Xem thêm :h matchstr()nếu bạn cần so sánh chỉ là một phần của đầu ra của uname.


2

Với rất nhiều máy móc, việc liệt kê tất cả tên máy chủ lưu trữ .vimrccó thể trở nên tẻ nhạt, có thể dễ dàng phân biệt giữa các hương vị unix khác nhau:

" set font when running on Solaris
if (match(system('uname -s'), 'SunOS') >= 0)  
   set guifont=*   " fixes "E665: Cannot start GUI, no valid font found"
endif

Thật không may, điều này phá vỡ trên các máy tính windows.
oligofren

1

Bạn chỉ có thể đặt các công cụ dành riêng cho hệ điều hành trong một .gvimrc tùy chỉnh cho mỗi máy và sử dụng một .vimrc chung cho tất cả chúng. Cả hai tệp đều được đọc khi GVim khởi động, chỉ .vimrc được đọc khi Vim không gui khởi động.


1

Về sự tách biệt giữa Linux và Windows - bạn có thể chỉ cần đặt các cài đặt khác nhau .vimrc_vimrctheo đó.

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.