ทำไมกลุ่มถึงส่งคืนรหัสออกที่ไม่ใช่ศูนย์ถ้าฉันออกทันทีหลังจากเปิด?


15

ฉันพบปัญหาแปลก ๆ เล็กน้อยvimกับ Snow Leopard: ฉันได้รับโค้ดทางออกที่ไม่เป็นศูนย์จากการทำงานvimและจากนั้นก็เลิก

$ vim
# exit immediately using :q
$ echo $?
1

อย่างไรก็ตามหากฉันใช้เส้นทางแบบเต็มvimฉันจะไม่เห็นพฤติกรรมนี้

$ /usr/bin/vim
# exit immediately using :q
$ echo $?
0

ตอนแรกฉันคิดว่าvimมาจากที่ไหนสักแห่งก่อนหน้าในเส้นทางของฉัน แต่:

$ which vim
/usr/bin/vim

ดังนั้นฉันจึงสูญเสีย สิ่งที่อาจทำให้เกิดสิ่งนี้

UPDATE: ปัญหานี้แก้ไขได้อย่างน่าอัศจรรย์ซึ่งทำให้ฉันต้องสงสัยอย่างมาก ทฤษฎีที่ดีที่สุดในปัจจุบันของฉันคือฉันมีปัญหากับ.vimrcปลั๊กอินของฉันหรือที่ฉันแก้ไขโดยไม่ได้ตั้งใจในขณะที่ปรับแต่งการตั้งค่าของฉันด้วยวิธีอื่น หากฉันสามารถติดตามสิ่งที่ฉันแก้ไขได้อย่างแน่นอนฉันจะอัปเดตด้วยข้อมูลนั้นอย่างแน่นอน ขอบคุณสำหรับคำตอบ


ฉันแก้ไขมันใน Makefile ด้วยการเพิ่ม-u NONEซึ่งบอกให้ vim โหลดไฟล์ config ไม่ได้เลย อาจช่วยได้ในบางสถานการณ์
Boldewyn

คำตอบ:


14

คุณมีfiletype offvimrc ของคุณหรือไม่ ลองแทนที่ด้วย:

filetype on
filetype off

ฉันมีปัญหานี้ในการใช้ Pathogen ของ Tim Pope บน OS X บทความนี้ช่วยฉันแก้ปัญหา หากคุณใช้ Pathogen ...

call pathogen#runtime_append_all_bundles()

... ทำสิ่งนี้แทน:

filetype on
filetype off
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
filetype plugin indent on

http://andrewho.co.uk/weblog/vim-pathogen-with-mutt-and-git


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

การแก้ไขนี้เป็นปัญหาที่เหมือนกันสำหรับฉันยกเว้น Vundle มากกว่า Pathogen
Jonah Braun

เช่นเดียวกับการเพิ่ม +1 อีกนี่เป็นการแก้ไขแบบเก่า แต่มันก็ใช้ได้กับฉันในการแก้ไขปัญหานี้โดยใช้ Vundle บนระบบ OSX เพียงแค่โยนข้างต้นที่มีอยู่filetype on filetype off
Mikey TK

8

ฉันนึกถึงคำอธิบายที่เป็นไปได้สองข้อ

  1. vimจริง ๆ แล้วเป็นนามแฝง โปรดทราบว่าwhichไม่แสดงชื่อtypeแทนคุณควรใช้แทน (ยกเว้นว่าคุณกำลังเรียกใช้ csh หรือ tcsh)

  2. กลุ่มจะค้นหาไฟล์บางไฟล์ในพา ธ ที่สัมพันธ์กับไดเร็กทอรีการติดตั้งซึ่งพิจารณาจากการดูargv[0](ชื่อของไฟล์เรียกทำงานที่ส่งผ่านจากเชลล์) และอย่างใดล้มเหลวในการค้นหาพา ธ นั้นถ้ามันถูกเรียกผ่านพา ธ สัมพัทธ์ นั่นอาจเป็นไปได้ในทางเทคนิค แต่ฉันไม่คิดว่า Vim จะทำเช่นนั้นได้


7

ฉันได้รับรหัสทางออกที่ไม่เป็นศูนย์จากเพียงแค่เรียกใช้กลุ่มและจากนั้นออก

นั่นไม่ได้เกิดขึ้นที่นี่ด้วยระบบที่คล้ายกัน: Snow Leopard และ Vim เวอร์ชันสต็อค

ลองคำสั่งนี้:

$ sudo dtruss vim +q

นั่นจะทำให้คุณได้รายชื่อ syscalls ทั้งหมดที่ Vim สร้างขึ้นในขณะที่มันเริ่มต้นแล้วปิดทันที ( dtrussเทียบเท่ากับstraceบน Linux หากคุณเคยใช้มาก่อน)

สิ่งที่คุณกำลังมองหาคือเส้นใกล้ถึงจุดสิ้นสุดที่แสดงรหัสข้อผิดพลาดโดยทั่วไปคือ -1 การดูที่อาร์กิวเมนต์ของการเรียกระบบควรนำคุณไปสู่ปัญหา ความเป็นไปได้สูงอย่างหนึ่งที่เป็นไปได้คือไฟล์ที่ขาดหายไปซึ่งอาจจะปรากฏขึ้นในการopen()โทร

ถ้าเป็นกลุ่มอย่างหมดจดเมื่อรันด้วยวิธีนี้คุณอาจมีปัญหาสิทธิ์ซึ่งsudoสิ่งที่จำเป็นในการอนุญาตให้dtrussเรียกใช้ได้ ในกรณีที่คุณอาจจะสามารถแก้ไขได้โดยการซ่อมแซมสิทธิ์


ขออภัยตอนนี้ฉันอยู่ในเครื่องทำงานแล้วและมันไม่ได้มีพฤติกรรมนี้ ฉันจะตรวจสอบให้แน่ใจเมื่อฉันอยู่ในบ้านของฉันอีกครั้ง
แฮงค์ Gay

หากคุณไม่สามารถเข้าใจได้ให้เพิ่มdtrussผลลัพธ์ในคำถามของคุณ (หรืออย่างน้อยที่สุด 25 บรรทัดสุดท้าย) ดังนั้นอะไรที่คุณไม่อาจเข้าใจได้อาจนำไปสู่คำตอบที่ถูกต้องอีกข้อหนึ่ง
Warren Young

@nlucaroni: ดีใจที่ได้ยิน สำหรับลูกหลาน แต่ที่ของทั้งสองความคิดในการแก้ไขคำตอบของฉันได้หรือไม่ นั่นคือคุณมีปัญหาการอนุญาตที่sudo"แก้ไข" แล้วแจ้งให้คุณทราบว่าคุณจำเป็นต้องเรียกใช้สิทธิ์ในการซ่อมแซมหรือไม่ หรือว่าค่อนข้างจะdtrussแสดงให้คุณเห็นข้อผิดพลาด syscall และถ้าเป็นเช่นนั้นข้อใดข้อหนึ่งและทำไมมันจึงล้มเหลว?
Warren Young

ข้อผิดพลาด syscall ในการเปิดไฟล์ที่ไม่ได้อยู่ที่นั่น เพื่อนร่วมงานของฉันเพิ่งพาคนอื่นไปทำ.vimไดเรกทอรีzipp'd .vimrcและสิ่งต่าง ๆ มีเส้นทางแบบเต็มและไฟล์หายไปจากปลั๊กอินที่ไม่ได้ใช้
nlucaroni

2

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

" Persistent views
if has("mksession")
    set viewdir=$HOME/.vimviews
    if has("unix")
        silent execute '!mkdir -p $HOME/.vimviews'
    endif
    au BufWinLeave * silent! mkview "make vim save view (state) (folds, cursor, etc)
    au BufWinEnter * silent! loadview "make vim load view (state) (folds, cursor, etc)
endif

เมื่อเข้าสู่บัฟเฟอร์โดยไม่มีชื่อไฟล์silent! loadviewจะดำเนินการซ่อนข้อผิดพลาด

E32: ไม่มีชื่อไฟล์

ซึ่งทำให้รหัสส่งคืนถูกตั้งค่าเป็นหนึ่ง

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