วิธีการตั้งค่า VIM ขึ้นอยู่กับคอมพิวเตอร์ใน. vimrc


44

ฉันแชร์ไฟล์การกำหนดค่า VIM ของฉันระหว่างคอมพิวเตอร์หลายเครื่อง อย่างไรก็ตามฉันต้องการให้การตั้งค่าบางอย่างเฉพาะเจาะจงสำหรับคอมพิวเตอร์บางเครื่อง

ตัวอย่างเช่นขนาดแบบอักษรบนแล็ปท็อปความละเอียดสูงควรแตกต่างจากเดสก์ท็อปความละเอียดต่ำ และที่สำคัญกว่านั้นฉันต้องการให้ gVIM บน Windows ทำงานได้มากกว่า windowsy และ MacVim บน OSX เพื่อทำตัว maccy และ gVIM บน Linux ให้ทำงานมากกว่าที่เคยทำ (นั่นอาจเป็นความรู้สึกแปลก ๆ แต่ฉันคุ้นเคยกับการเปลี่ยนโหมดจิตเมื่อทำการสลับ OS)

มีวิธีการตั้งค่าบางอย่างใน.vimrcเครื่องหรือขึ้นอยู่กับระบบปฏิบัติการหรือไม่?

คำตอบ:


44

ตรวจจับระบบปฏิบัติการใน.vimrc:

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

4
มีประโยชน์ด้วย: has('gui_running')หากคุณต้องการแยกความแตกต่างระหว่างโหมด tty และโหมด GUI
Chris Johnsen

10
ฟังก์ชัน has () ทดสอบการมีอยู่ของคุณสมบัติ Vim ไม่มีคุณสมบัติ 'linux' อาร์กิวเมนต์ที่เหมาะสมคือ 'unix' นอกจากนี้อาร์กิวเมนต์ที่เหมาะสมสำหรับ OS-X คือ 'macunix' นอกจากนี้ยังมีฟีเจอร์ 'mac' แต่ฉันไม่รู้ว่าhas('mac')เป็นจริงสำหรับ Macs ทั้งหมดหรือเพียงแค่ pre-OS-X Macs ดู:help feature-listรายการทั้งหมด
garyjohn

1
ใช่has('unix'). ความผิดพลาดของฉัน.
Coder ชั่วคราว

คำตอบที่ล่าช้ามาก แต่ใช่มี ('mac') ทริกเกอร์ใน OSX สำหรับฉัน
Diablo-D3

1
ฉันได้ทดสอบ vim 1) ที่มาพร้อมกับ OS X และ 2) ที่ฉันติดตั้งผ่าน Gentoo Prefix (คล้ายกับ Homebrew) และ 3) ที่มาจาก MacVim เพียงคนเดียวที่มาจาก MacVim has("mac")อย่างถูกต้องจะกลับมาจริงสำหรับ ฉันเดาว่าพวกเขาใช้โปรแกรมแก้ไขที่ทำให้การทดสอบคุณลักษณะใช้งานได้จริง หากคุณพึ่งพาhas("mac")การทดสอบให้ทำแบบทดสอบบางอย่างเพื่อให้แน่ใจว่ารองรับวีไอพี
yegle

26

ในการทดสอบเครื่องเฉพาะคุณสามารถทดสอบผลลัพธ์ของhostnameคำสั่ง ตัวอย่างเช่น,

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

คุณสามารถทดสอบค่าของตัวแปรสภาพแวดล้อมที่มี:

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

$DISPLAYตัวแปรยังสามารถเป็นประโยชน์


13
hostname () จะทำสิ่งนี้เช่น: ถ้า hostname () == 'tigger' ... โดยไม่ต้องทำการเรียกระบบ
tvon

ผลสำหรับsystem('hostname')เป็นดังนั้นผมจึงมีการเปลี่ยนแปลงคำสั่งแทนการmachine.mycompany.com\n substitute(system('hostname'), '\.\_.*$', '', '')
JPaget

9

ฉันมีตัวอย่างนี้ในvimrc:

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

สิ่งนี้จะดำเนินการsource $HOME/.$HOSTNAME.vimrcถ้ามันมีอยู่ ฉันใช้hostname()และเรียงต่อกันคุณสามารถใช้รวบรัดมากขึ้นexpand('$HOME/.$HOSTNAME.vimrc')ถ้าคุณรู้ว่า$HOSTNAMEมีการตั้งค่าเสมอ


7

คำตอบก่อนหน้านี้เกี่ยวกับการตรวจจับระบบปฏิบัติการไม่พบ OS X ใน MacVim สำหรับฉัน (และไม่ใช้has("macunix")เป็นเอกสารแนะนำให้ควร)

นี่คือสิ่งที่ฉันใช้เพื่อแยกความแตกต่างระหว่าง Windows และ 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

โปรดทราบว่าใช้has("win32")งานได้สำหรับฉันแม้ใน 64 บิต Vim บน Windows 64 บิต

คุณสามารถใช้การทดสอบที่คล้ายกันของunameภายในif has("unix")บล็อคเพื่อแยกความแตกต่างรสชาติอื่น ๆ ของ Unix เพียงแค่เรียกใช้unameหรือจากบรรทัดคำสั่งที่จะเห็นสิ่งที่คุณต้องการที่จะเปรียบเทียบuname -a s:uname withดูเพิ่มเติม:h matchstr()หากคุณต้องการเปรียบเทียบเพียงส่วนหนึ่งของผลลัพธ์ของ uname


2

ด้วยเครื่องจักรจำนวนมากการระบุชื่อโฮสต์ทั้งหมดใน.vimrcนั้นอาจกลายเป็นเรื่องน่าเบื่อหน่ายการแยกความแตกต่างระหว่างรสชาติของยูนิกซ์ที่แตกต่างกันอาจง่ายกว่า:

" 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

น่าเสียดายที่สิ่งนี้เกิดขึ้นกับเครื่อง windows
oligofren

1

คุณสามารถใส่ข้อมูลเฉพาะระบบปฏิบัติการลงใน. gvimrc ที่กำหนดเองสำหรับแต่ละเครื่องและใช้. vimrc ทั่วไปกับพวกเขาทั้งหมด ทั้งสองไฟล์จะถูกอ่านเมื่อ GVim เริ่มทำงานเฉพาะ. vimrc เท่านั้นที่จะอ่านเมื่อ non-gui Vim เริ่มทำงาน


1

เกี่ยวกับการแยกระหว่าง Linux และ Windows - คุณสามารถตั้งค่าที่แตกต่างกันใน.vimrcและ_vimrcตาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.