ฉันจะทำให้. vimrc อ่านจากไฟล์ภายนอกได้อย่างไร


24

ฉันต้องการแก้ไขค่าของฉัน.vimrcเพื่ออ่านค่าของตัวแปรจากไฟล์ภายนอก ฉันจะทำสิ่งนี้ได้อย่างไร

โดยเฉพาะเพื่อนและฉันแบ่งปัน repo คอมไพล์กับ.vimไฟล์ของเราแต่มีความแตกต่างเล็กน้อยในสิ่งที่เราต้องการในการกำหนดค่าของเรา ดังนั้นไฟล์ส่วนใหญ่จึงเป็นเรื่องธรรมดา แต่เราใช้ถ้าคำสั่งเพื่อพิจารณาว่าจะโหลดส่วนเฉพาะของผู้ใช้เช่นนี้หรือไม่:

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

หลังจากตรวจสอบ.vimrcการควบคุมแหล่งที่มาทั่วไปของเราแล้วเราแต่ละคนจะต้องเปลี่ยนการlet whoamiกำหนดเพื่อให้ส่วนของเราจะถูกโหลด แต่ฉันต้องการเก็บไฟล์แยกต่างหากซึ่งอาจแตกต่างกันสำหรับเราแต่ละคนและสิ่งที่กลุ่มจะโหลดค่าตัวแปรนั้น

อาจเป็นอีกมุมหนึ่งในเรื่องนี้: จะเป็นกลุ่มโดยอัตโนมัติอ่านไฟล์ทั้งหมดใน.vimไดเรกทอรีของฉัน? ถ้าเป็นเช่นนั้นเราแต่ละคนสามารถใส่ symlink ในนั้นชื่อ username.vim และเชื่อมโยงไปยังไฟล์ภายนอกที่จะแตกต่างกันสำหรับเราแต่ละคน

คำตอบ:


35

ในไฟล์. vimrc หลักของคุณ:

source otherVimScriptFilePath.vim

จากนั้นให้ใส่คำสั่งตัวแปรในไฟล์นั้น:

" otherVimScriptFilePath.vim
let whoami = "user1"

2
FYI - ในสถานการณ์ของฉันมันเป็นประโยชน์ที่จะทำlet whoami = ""ก่อนที่sourceบรรทัดดังนั้นถ้ามันล้มเหลวในการโหลดไฟล์ภายนอกตัวแปรมีอยู่และฉันได้รับข้อความแสดงข้อผิดพลาดที่เราได้ตั้งค่าไว้ก่อนหน้านี้สำหรับตัวแปรที่ไม่ได้ตั้งค่า
นาธานลอง

2
@ กอริลลาแซนวิช: ฉันใช้สิ่งนี้เพื่อแหล่ง vimrc ของฉันบนเครื่อง windows เนื่องจาก windows ไม่มีลิงก์สัญลักษณ์ ฉันมีโฟลเดอร์ SVN ที่มีสิ่งนี้และจุดอื่น ๆ ทั้งหมดของฉัน ดังนั้นฉันจึงมี _vimrc ที่จัดหาของจริงในโฟลเดอร์ svn
Robert S Ciaccio

@ กอริลลาแซนวิช: ดูคำตอบของฉันสำหรับsilent! sourceส่วน
กิระ

6

ใช้ลอง / จับ

ตั้งแต่ถามคำถามนี้ฉันได้พบกับกรณีการใช้งานอื่นสำหรับการโหลดไฟล์ภายนอก: tweaks เฉพาะเครื่อง

เนื่องจากฉันอาจหรือไม่จำเป็นต้องทำการปรับแต่งบนเครื่องที่กำหนดฉันจึงใช้ a try/catchเพื่อโหลดไฟล์ภายนอก หากไม่มีไฟล์ดังกล่าวฉันปล่อยให้มันล้มเหลวอย่างเงียบ ๆ

" 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

ในการตอบคำถามสุดท้ายไฟล์ใน~/.vimจะไม่ถูกโหลดโดยอัตโนมัติ แต่ไฟล์ทั้งหมดใน~/.vim/pluginนั้น


2
และสถานที่อื่น ๆ ภายใต้ ~ / .vim ( after, autoload)
akira

4

คุณสามารถให้ ~ / .vimrc ของคุณโหลดไฟล์อื่นโดยใช้:sourceคำสั่ง ตัวอย่างเช่นคุณสามารถใส่คำสั่งเฉพาะใน ~ / .myvimrc และโหลดคำสั่งเหล่านั้นด้วย

source ~/.myvimrc

หรืออย่างที่คุณคิดคุณสามารถใส่ชื่อของคุณลงในไฟล์แบบนี้ได้:

let user = "user1"

จากนั้นใส่มันลงใน ~ / .vimrc ของคุณ:

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

แทนที่จะใส่ชื่อของคุณในแฟ้มแม้ว่าคุณอาจจะใช้ $ USER เป็น akira แนะนำหรือชุดuserใช้whoamiเช่นนี้

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

จำเป็นต้องใช้ฟังก์ชั่น replace () เพราะเอาต์พุตของระบบ () มักจะมี '\ n' ที่ติดอยู่ด้านท้าย


whoamiไม่ทำงานบน windows
akira

@akira: จริง แต่ GorillaSandwich ใช้ Unix ไม่ใช่ Windows $ USER ไม่ทำงานกับ Windows อย่างน้อยก็ไม่ใช่ Windows XP
garyjohn

เพียงแค่พูดว่าบน $ USERNAME ของ windows mainpoint คือ: whoamiวางไข่กระบวนการใหม่เมื่อคุณเปิดโปรแกรมแก้ไขมันควรจะเร็วและไม่ทำงาน (ไร้ประโยชน์) อีกหลายครั้ง
กิระ

2

ชื่อของผู้ใช้ที่ล็อกอินมีอยู่ในตัวแปรสภาพแวดล้อม $ USER คุณสามารถเข้าถึงตัวแปรนั้นได้อย่างง่ายดาย:

:echo $USER

ดังนั้นเพียงใช้

execute "silent! source vimrc." . $USER

ใน vimrc ของคุณและใส่การตั้งค่าเฉพาะของผู้ใช้

vimrc.joe

หรือชื่อล็อกอินของคุณคืออะไร


0

ฉันไม่แน่ใจว่า vimrc ของคุณเป็นอย่างไรดังนั้นอาจเป็นไปไม่ได้ แต่ถ้ามีชิ้นส่วนขนาดใหญ่ที่คุณและเพื่อนแชร์คุณอาจต้องการแบ่งออกเป็นปลั๊กอินแยกต่างหาก คุณสามารถเพิ่มไฟล์ไปยัง~/.vim/pluginไดเรกทอรีเพื่อให้พวกเขาโหลดเมื่อเริ่มต้น (โหลดตามลำดับตัวอักษร - ใช้:scriptnamesเพื่อตรวจสอบ)

ด้วยวิธีนี้คุณสามารถมี vimrc ที่ไม่เหมือนใครได้ทั้งหมด แต่การกำหนดค่าทั่วไปทั้งหมดของคุณอยู่ในปลั๊กอิน หากคุณแยกพวกเขาอย่างมีเหตุผลมันทำให้การแบ่งปันกับผู้อื่นเป็นเรื่องง่าย

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