$ PATH ใน Vim ไม่ตรงกับ Terminal


10

ฉันใช้ MacVim และเมื่อฉันไม่เปิดจาก Terminal ( mvim) $ PATH ของมันไม่รวมสิ่งที่ฉันตั้งไว้ใน. bash_profile ของฉัน ดูเหมือนว่าจะมีค่าเริ่มต้น/usr/bin:/bin:/usr/sbin:/sbinเท่านั้น

ฉันใช้ OS X 10.5.8 แม้ว่าฉันจะสามารถตั้งค่าด้วยตนเองใน. vimrc ของฉันที่จะโอเคแม้ว่าฉันจะชอบที่จะดึงจากที่เดียวกับ Terminal ฉันได้ลองทำตามสิ่งที่แนะนำในไซต์เดียวแล้วเพิ่มlet $PATH += /blah/foo:/bar/etcให้เป็นประโยชน์

แก้ไข / แก้ไข:ดูคำตอบของฉันด้านล่าง MacVim มีตัวเลือกในการแก้ไขปัญหานี้


คำตอบ:


12

MacVimดูเหมือนจะได้รับ $ PATH ในวิธีที่ละเว้น dotfiles ที่กำหนดเองของผู้ใช้ปกติ

ฉันไม่สามารถพูดได้ว่าทำไมพวกเขาถึงชอบทำแบบนี้ แต่มันดูเหมือนจะเป็นจริง ในการตั้งค่า (ภายใต้แท็บขั้นสูง) คุณสามารถเลือกที่จะ "เปิดใช้งานกระบวนการ Vim ในเปลือกเข้าสู่ระบบ" แต่มันปรับปรุงเพียง$PATHเล็กน้อยสำหรับฉัน

ดีที่สุดที่ฉันสามารถบอกได้ว่า MacVim ใช้/usr/libexec/path_helper- ซึ่งจะใช้รายการที่พบ (1) ใน/etc/pathsไฟล์และ (2) สิ่งเพิ่มเติมที่พบใน/etc/paths.d/ไดเรกทอรี การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นในโฮมไดเร็กตอรี่ของผู้ใช้ (ผ่าน.profileหรือคล้ายกัน) จะถูกละเว้น

สั้น, คุณจะได้รับค่าเริ่มต้นของ OSX บวกการใช้งานใด ๆ /etc/paths.dที่เพิ่มให้กับตัวเอง (ตัวอย่างเช่น MacTex ไม่ได้ในระบบของฉัน.) ดังนั้นถ้าคุณต้องการที่จะปรับเส้นทาง MacVim, /etc/paths.dวิธีการหนึ่งที่จะเพิ่มไฟล์ที่มีรายการที่จะ (ฉันจะไม่แก้ไขโดยตรง/etc/pathsตั้งแต่นั้นคุณจะเสี่ยงต่อการเปลี่ยนแปลงที่ถูกยกเลิกโดยการอัปเดตระบบ)

ขอบคุณที่แจ้งให้เราทราบ ฉันออกไปยื่นข้อผิดพลาดสิ่งที่อยากได้ที่ MacVim


ฉันจะคิดอย่างนั้นเช่นกัน แต่ฉันได้เพิ่ม '/etc/paths.d/' สองสามอย่างที่แสดงใน Terminal แต่ไม่ใช่กับ MacVim
โดนัท

และที่จริงมีไฟล์ '/ etc / path' ของฉันมากกว่าที่อยู่ในเส้นทางของ MacVim
โดนัท

@Donut: ดีนั่นเป็นคี่ บนเครื่องของฉันถ้าฉันเพิ่มบางสิ่ง/etc/paths.dมันจะปรากฏขึ้นในครั้งต่อไปที่ฉันบูต MacVim คุณใส่ในรูปแบบใด ควรเป็นหนึ่งรายการต่อบรรทัดฉันเชื่อว่ามีไดเรกทอรี $ PATH ในแต่ละบรรทัด (เช่น / usr / texbin)
Telemachus

ฉันพลาดย่อหน้าแรกของคุณไปแล้วอย่างสิ้นเชิง: การเลือก "เรียกใช้กระบวนการ Vim ในเชลล์ล็อกอิน" ทำให้ฉันได้รับผลกระทบ ดูคำตอบของฉัน
โดนัท

7

BTW การกำหนดค่าตามความชอบ "กระบวนการเรียกใช้ Vim ในเชลล์ล็อกอิน" ไม่สามารถใช้ได้ใน MacVim (อย่างน้อยไม่ใช่ v7.3) ฉันเห็นว่าการเปิดตัว MacVim จาก Finder จะได้รับเส้นทางที่ผิด แต่การเปิดตัวจากเชลล์ (เช่น "mvim") จะได้รับเส้นทางที่ถูกต้อง


3

มันไม่ได้มาจาก. bash_profile แต่คุณสามารถใช้สิ่งนี้ใน. vimrc ของคุณ:

let $PATH=$PATH . ':/blah/foo'

คุณต้อง: หรือมันจะไม่เป็นตัวแปร PATH ที่ถูกต้อง


ฉันเพิ่งลองและดูเหมือนจะไม่เปลี่ยน $ PATH สำหรับ MacVim ฉันยังทดสอบกับกลุ่มในเทอร์มิ (ทั้ง/usr/bin/vim(จากแอปเปิ้ล) และ/opt/local/bin/vim(จาก MacPorts) และดูเหมือนว่าไม่จำเป็นเป็นกลุ่มในขั้วแล้วหยิบ $ เส้นทางที่เหมาะสมเป็นที่มาโดยไฟล์ที่มีจุดของฉัน..
เทเล

1
ฉันพยายามทำเช่นนี้เพื่อประโยชน์
โดนัท

2

ฉันไม่อยากจะเชื่อเลยว่าไม่ได้เห็นสิ่งนี้มาก่อน โอเคฉันเชื่อได้ อย่างไรก็ตาม MacVim มาพร้อมกับตัวเลือกที่ช่วยแก้ปัญหานี้ ภายใต้การตั้งค่าเพียงตรวจสอบ "เรียกใช้กระบวนการ Vim ในเปลือกเข้าสู่ระบบ" แค่นี้แหละมันใช้งานได้ดี โก๋. ฉันโง่

อุ่ย

ฉันเผลอเขียนคำตอบนี้โดยไม่ทราบว่า Telemachus ได้ให้คำตอบที่ถูกต้องแล้ว ทำเครื่องหมายว่าเขาเป็นคำตอบ


ดีใจที่ได้จัดเรียง
Telemachus

1

บทความ Mac Dev Center นี้อาจมีประโยชน์สำหรับผู้ใช้


ไม่สามารถใช้งานได้ อาจทำสิ่งผิดปกติ บทความแนะนำให้เพิ่มคุณสมบัติ 'LSEnvironment' ในแอพ 'ไฟล์รายการคุณสมบัติข้อมูล' ซึ่งฉันคิดว่าเป็น ~ / Library / Preferences / org.vim.MacVim.plist ฉันทำให้มันเป็นพจนานุกรมที่มี 'PATH' (และได้ลอง 'path' และ '$ PATH') เป็นคีย์และสิ่งที่ฉันต้องการให้พา ธ เป็นค่าสตริง ดูเหมือนว่าจะดึง PATH จากแหล่งลึกลับบางแหล่ง สกรีนช็อตของไฟล์ plist
โดนัท

1

ฉันไม่มีปัญหาในการเพิ่มไฟล์ไปยังไดเรกทอรี path.d ฉันเพิ่มไฟล์ชื่อ mysql ซึ่งเนื้อหาเป็น:

/ usr / local / MySQL / bin [กลับ]

จากนั้นฉันวางไฟล์นี้ไว้ในไดเรกทอรี path.d และเปลี่ยนความเป็นเจ้าของเป็นรูท: ล้อ ตอนนี้ไดเรกทอรี mysql จะถูกเพิ่มในตัวแปร $ PATH ของฉันโดยอัตโนมัติ

ฉันไม่ได้ตรวจสอบอย่างเต็มที่ แต่อาจจะ (a) รวมถึง [RETURN] ที่ท้ายบรรทัดและ / หรือ (b) ตั้งค่าความเป็นเจ้าของไฟล์ให้รูทอาจจำเป็น



1

ฉันวิ่งเข้าไปในนี้วันนี้ MacVim ไม่มีตัวเลือก "login shell" อีกต่อไปและการแก้ไขไฟล์ทั้งระบบสำหรับการตั้งค่าเฉพาะสำหรับผู้ใช้นั้นเป็นแบบร่าง

นี่คือวิธีการแก้ปัญหาโดยใช้ตัวเลือกเป็นกลุ่มเท่านั้น (ดู:help :!และ:help shell)

ในการ~/.vimrcเพิ่มบรรทัดของคุณ

set shell=/bin/bash
set shellcmdflag=-l\ -c

นี้จะทำให้bashเปลือกเริ่มต้นของคุณจาก (Mac) เป็นกลุ่มและเพิ่ม-lธง (เปลือกเข้าสู่ระบบ) :!{cmd}คำสั่งเรียกด้วย เมื่อดำเนินการ:shellbash จะเริ่มต้นเป็น "เชลล์แบบโต้ตอบที่ไม่ใช่เชลล์ล็อกอิน"

ที่จะทำให้$PATHการทำงานของคุณจะต้องมีมันตั้งอยู่ใน~/.bash_profileสำหรับ:!และสำหรับ~/.bashrc :shell(ดูINVOCATIONในman bash)

UPDATE: สิ่งนี้ไม่จำเป็นในคอมพิวเตอร์เครื่องอื่นของฉันดังนั้นจึงมีโอกาสอย่างอื่นที่เป็นต้นเหตุ


1
คุณสามารถทำสิ่งเดียวกันสำหรับ zsh กําหนด$PATHใน.zprofileและรวมถึง-lธงทั้งในหรือset shell set shellcmdflag
jladan

0

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

! source ~/.bash_profile

ที่อาจทำเคล็ดลับ แต่มีข้อแม้เล็กน้อย:. bash_profile มีขึ้นเพื่อให้ได้มาเพียงครั้งเดียว มันอาจมีคำสั่งที่ไม่ใช่ idempotent (สิ่งที่ควรดำเนินการเพียงครั้งเดียว) กรณีในจุด:

$PATH += /blah/foo:/bar/etc

ยิ่งได้รับการเรียกมากเท่าไหร่$PATHก็ยิ่งมีจำนวนมากขึ้นเท่านั้น อย่างไรก็ตามหากไม่ใช่เรื่องใหญ่คำแนะนำเกี่ยวกับยูนิกซ์ก็คือให้ใส่คำสั่งแบบครั้งเดียว~/.bashrcแล้วเรียกใช้source ~/.bashrcจาก.vimrcไฟล์ของคุณ


ไม่สามารถจัดหา. bash_profile หรือ. bashrc ได้ ฉันพยายามเรียกใช้ด้วยตนเอง:source .bash_profileแต่เพิ่งเกิดข้อผิดพลาด "ไม่ใช่คำสั่งแก้ไข" สำหรับทุกคำสั่งในไฟล์และเหมือนกันกับ. bashrc
โดนัท

ขอโทษ ... ฉันกำลังคิดอะไรอยู่ ... คุณอาจลอง! source .bash_profile
David Berger

ลองทั้ง. bash_profile และ. bashrc แล้วแต่ยังไม่ผ่าน นี่คือสิ่งที่ฉันใช้ใน. bash_profile เพื่อเปลี่ยน PATH: 'PATH = / usr / local / bin: /Applications/Espresso.app/Contents/SharedSupport/Tools /: / Applications / MacVim /: $ PATH' และในของฉัน .bashrc: 'export PATH = / Applications / MAMP / bin / php5 / bin: $ PATH' และ. bash_profile ที่มีผลต่อเซสชันเทอร์มินัลของฉัน
โดนัท

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