ฉันจะให้ Vim เพิกเฉยต่อการกำหนดค่าผู้ใช้ทั้งหมดได้อย่างไรราวกับว่ามันถูกติดตั้งใหม่


21

เพื่อให้มั่นใจว่าพฤติกรรมไม่ได้รับผลกระทบจากการกำหนดค่าส่วนตัวของฉันฉันต้องการเริ่ม Vim ด้วยวิธีที่ละเว้นไฟล์ config ที่ผู้ใช้ติดตั้งทั้งหมดของฉันราวกับว่า Vim เพิ่งถูกติดตั้งใหม่เป็นครั้งแรกและผู้ใช้เรียกใช้ ทันที

นี่คือการแก้ไขในคำถามที่พบบ่อยซึ่งแสดงให้เห็นว่าคำตอบคือการเริ่มต้นเป็นกลุ่มด้วยคำสั่งต่อไปนี้:

vim -u NONE -U NONE -N -i NONE

วิธีนี้ได้รับมากที่สุดแต่runtimepathตัวเลือกยังคงมี~/.vimและโดยเฉพาะอย่างยิ่ง~/.vim/after(เช่นถ้าฉันเปิดการตรวจสอบประเภทไฟล์และเปลี่ยนประเภทไฟล์รหัสใน~/.vim/after/syntax/the_relevant_filetype.vimจะถูกดำเนินการ)

ฉันสามารถแก้ไขปัญหาเฉพาะนี้ได้โดยเรียกใช้คำสั่งต่อไปนี้เมื่อเริ่มต้น *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... แต่ฉันไม่แน่ใจว่า:

  1. นี่เป็นโซลูชันที่มีประสิทธิภาพ: เส้นทางเหล่านี้เป็นเส้นทางเดียวที่ทำให้การกำหนดค่าผู้ใช้มีผลหรือไม่ มีอะไรอีกที่ฉันไม่ได้คิด?
  2. มีวิธีที่ดีกว่าในการบรรลุผลลัพธ์ที่ต้องการ

* โดยใช้--cmdหรือ-u vimrcเชลล์อาร์กิวเมนต์หรือเพียงพิมพ์ด้วยตนเอง

แก้ไข : นี่คือตัวอย่างหนึ่งของปัญหาที่ฉันกำลังพยายามแก้ไข (แม้ว่าฉันต้องการวิธีการแก้ไขปัญหาที่เป็นไปได้อื่น ๆ ที่ฉันอาจยังไม่ได้พบ):

  1. สร้างไฟล์ ~ / .vim / after / ftplugin / c.vim ที่มีเนื้อหา:

    noremap i :echom "This is not default behaviour"<CR>
    

    ตอนนี้เรามีการกำหนดค่าที่ผู้ใช้ติดตั้งซึ่งเราต้องการเพิกเฉย ลองทดสอบวิธีแก้ปัญหาที่แนะนำโดย FAQ

  2. เรียกใช้ Vim ด้วยคำสั่ง:

    vim -u NONE -U NONE -N -i NONE
    
  3. ป้อนคำสั่ง:

    :filetype plugin on
    :set ft=c
    i
    

พฤติกรรมที่ต้องการ : กลุ่มควรเข้าสู่โหมดแทรก นี่คือสิ่งที่จะทำถ้าไม่มีการกำหนดค่าผู้ใช้

ลักษณะการทำงานที่สังเกต : Vim พิมพ์ "นี่ไม่ใช่ลักษณะการทำงานเริ่มต้น"


บนระบบปฏิบัติการยูนิกซ์เหมือนสิ่งที่ถ้าคุณทำHOME=/dev/null vim -u NONE?
muru

@muru ดีความคิดและอาจจะเพิ่มมูลค่าเป็นคำตอบ แต่ก็ไม่ได้สมบูรณ์แบบ เห็นได้ชัดว่าคุณสูญเสียความสามารถเช่น:cd ~แต่ตำแหน่งเริ่มต้นของviminfoไฟล์อยู่ใน $ HOME ซึ่งอาจทำให้เกิด E138 ฉันเดาว่าการสร้างไดเรกทอรีใหม่ที่ว่างเปล่าและการใช้สิ่งนั้นสำหรับ $ HOME อาจเป็นทางออกที่ดีที่สุด
รวย

@muru เกิดขึ้นกับฉันว่าถ้าคุณตั้งค่า $ HOME ถ้างั้นคุณก็ไม่จำเป็นต้องระบุด้วย-u NONEเหรอ?
Rich

1
ในกรณีนี้/tmpอาจจะดีกว่ามันเป็นความคิดแรกของฉัน แต่จากนั้นฉันเลือก / dev / null เป็นหลุมดำ ... หรืออะไรทำนองHOME=$(mktemp -d) vim ...นั้น
muru

มันจะไม่อ่านระบบ vimrc ถ้าคุณไม่ได้ใช้-u NONE? ฉันคิดว่ามันขึ้นอยู่กับพฤติกรรมที่คุณต้องการ
muru

คำตอบ:


16

ในฐานะ Vim 8.0.1554 (น่าเสียดายที่ยังไม่ใช่ Neovim) คุณสามารถvim --cleanใช้ได้ :help bugsวิธีนี้เป็นวิธีที่แนะนำโดย

:help --clean เอกสาร:

คล้ายกับ "-u DEFAULTS -U NONE -i NONE":
- การกำหนดค่าเริ่มต้นจากไฟล์และตัวแปรสภาพแวดล้อมถูกข้าม
- 'runtimepath' และ 'packpath' ถูกตั้งค่าให้ยกเว้นรายการโฮมไดเรกทอรี (ไม่เกิดขึ้นกับ -u DEFAULTS)
- the | defaults.vim | โหลดสคริปต์แล้วซึ่งหมายถึง 'ไม่เข้ากัน': ใช้ค่าเริ่มต้นของ Vim
- no | gvimrc | โหลดสคริปต์แล้ว
- ไม่มีไฟล์ viminfo อ่านหรือเขียน


1
ดี! มันง่ายกว่าล้อเล่นกับ$HOMEตัวแปร นักพัฒนา Goodjob เป็นกลุ่ม และขอบคุณสำหรับคำตอบ!
รวย

1
--cleanยังทำงานร่วมกับneovimในตอนนี้ ( github.com/neovim/neovim/commit/ ...... เพื่อรวมใน 0.4.0) แต่ไม่รวมไดเรกทอรีหลัก
Christian Clason

(ยังแพทช์นั้นกำลังรอที่จะได้รับการแจ้ง)
Christian Clason

11

$HOMEวิธีหนึ่งที่จะกำจัดไฟล์เฉพาะของผู้ใช้จะใช้ค่าที่แตกต่างกันของ หากต้องการอนุญาตให้ไม่อ่านหรือเขียนอะไร (เช่น viminfo) คุณสามารถใช้/dev/null:

HOME=/dev/null vim -u NONE

สิ่งนี้จะทำให้เกิดข้อผิดพลาดเกี่ยวกับviminfoดังนั้นคุณสามารถสร้างโฟลเดอร์ชั่วคราวหรือใช้โฟลเดอร์ที่มีอยู่ (เช่น/tmp):

HOME=$(mktemp -d) vim -u NONE

ด้วยเช่น$HOME, อาจไม่จำเป็นขึ้นอยู่กับสิ่งที่ผู้ดูแลระบบได้เพิ่มให้กับทั้งระบบ-u NONE vimrcยกตัวอย่างเช่นในทุกระบบห้องปฏิบัติการฉันดูแลผมเพิ่ม/etc/vim/vimrc.local(sourced โดยแพคเกจเริ่มต้นที่เป็นกลุ่มของ/etc/vim/vimrc) ที่มีnocompatible, syntaxฯลฯ ชุดและfiletype onได้เป็นอย่างดี


3
vim -i NONE เพื่อป้องกันการโหลด viminfo
Christian Brabandt

1

ฉันไม่สามารถตอบได้มากนัก แต่มีประเด็นหนึ่งที่ฉันไม่เห็นพูดถึงและตอบการตีความสิ่งที่อยู่ในชื่อเรื่อง

ฉันจะให้ Vim เพิกเฉยต่อการกำหนดค่าผู้ใช้ทั้งหมดได้อย่างไรราวกับว่ามันถูกติดตั้งใหม่

บางคนแนะนำvim -u NONE หรือvim -u NORC

ที่ในบางวิธีบิตเล็กน้อยกว่าเพียงแค่ไม่มีไฟล์ vimrc เมื่อฉันพิมพ์ 'i' จะไม่พูดว่า 'ใส่' คุณอาจต้องการที่จะยังคงพูดว่า 'แทรก' หากคุณเริ่มเป็นกลุ่มด้วยไฟล์ vimrc ของคุณว่างเปล่ามันจะแสดงการแทรก

นั่นเป็นเพราะเสียงเรียกเข้าโหลดการกำหนดค่าเริ่มต้นก่อน

คุณสามารถชี้ vim ไปยังไฟล์เริ่มต้นนั้นเพื่อให้เอฟเฟกต์ของไฟล์ vimrc ของคุณว่างเปล่า ตรวจสอบว่าคุณมี/etc/vim/vimrcและคุณสามารถทำvim -u /etc/vim/vimrc หรือบน osx ไฟล์เริ่มต้นคือ/usr/share/vim/vicmrc


ฉันคิดว่านั่นเป็นสิ่งที่กลุ่ม - สะอาดจะทำเพื่อคุณ
quemeraisc

@quemeraisc จะโหลดvim --clean defaults.vimคำตอบนี้จะหมายถึงระบบ vimrc (ดู:help system-vimrc.) ซึ่งผมคิดว่าจะไม่ได้vim --cleanโหลดโดย
รวย

@barlap: เพื่อหลีกเลี่ยงความสับสนกับ defaults.vim (ดู:help defaults.vim) อาจจะดีกว่าที่จะเปลี่ยนถ้อยคำdefault configไปsystem vimrcในคำตอบนี้ หรือดีกว่าหารือทั้งในคำตอบ!
รวย

0

จากVim-FAQ 2.5 :

2.5 ฉันมีปัญหา "xyz" (บาง) กับ Vim ฉันจะตรวจสอบว่าเป็นปัญหากับการตั้งค่าของฉันหรือเป็นกลุ่มได้อย่างไร / ฉันพบข้อบกพร่องใน Vim หรือไม่?

ก่อนอื่นคุณต้องค้นหาว่ามีข้อผิดพลาดเกิดขึ้นในไฟล์รันไทม์จริงหรือปลั๊กอินใด ๆ ที่แจกจ่ายกับ Vim หรือว่าเป็นผลข้างเคียงอย่างง่ายของตัวเลือกการกำหนดค่าใด ๆ จาก. vimrc หรือ. gvimrc ของคุณ ดังนั้นก่อนอื่นให้เริ่มเป็นกลุ่มดังนี้:

vim -u NONE -U NONE -N -i NONE

สิ่งนี้จะเริ่ม Vim ในโหมด nocompatible (-N) โดยไม่ต้องอ่านไฟล์ viminfo ของคุณ (-i NONE) โดยไม่ต้องอ่านไฟล์การกำหนดค่าใด ๆ (-u NONE สำหรับการไม่อ่านไฟล์. vimrc และ -U NONE สำหรับการไม่อ่านไฟล์. gvimrc) หรือ แม้กระทั่งปลั๊กอิน


1
แม้จะอยู่ในคำถามที่พบบ่อย แต่ก็ไม่ได้ผลเพราะเหตุผลที่กล่าวถึงในคำถาม
Rich

@Rich จากความคิดเห็นของคุณเกี่ยวกับคำถาม: ensure that none of the behaviour I'm seeing is caused by user config- แล้วดูเหมือนว่าคุณกำลังพยายามที่จะทำว่าสิ่งที่จะถูกอธิบายในคำถามที่พบบ่อย ฉันได้อ่านคำถามของคุณอีกครั้งแล้ว แต่ก็ยังไม่เข้าใจว่าอะไรคือสาเหตุที่คุณพูดถึง
mMontu

ฉันพยายามทำสิ่งที่อธิบายในคำถามที่พบบ่อย แต่วิธีการแก้ปัญหาที่ให้ไม่ทำงานเนื่องจากการruntimepathตั้งค่า
รวย

มีอะไรผิดปกติเกี่ยวกับruntimepath? :help rtpดูเหมือนว่าเริ่มต้นสำหรับตัวเลือกนี้ตามที่อธิบายไว้ใน ค่านี้มีผลต่อการทดสอบของคุณอย่างไร
mMontu

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