Tại sao vim trả lại mã thoát không bằng 0 nếu tôi thoát ngay sau khi mở?


15

Tôi đang gặp phải một vấn đề kỳ lạ với vimSnow Leopard: Tôi nhận được một mã thoát khác không chỉ bằng cách chạy vimvà sau đó thoát.

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

Tuy nhiên, nếu tôi sử dụng đường dẫn đầy đủ đến vim, tôi sẽ không thấy hành vi này

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

Lúc đầu, tôi nghĩ vimlà đến từ một nơi nào đó sớm hơn trên con đường của mình, nhưng:

$ which vim
/usr/bin/vim

Vì vậy, tôi đang thua lỗ. Điều gì có thể gây ra điều này?

CẬP NHẬT: Vấn đề này đã tự giải quyết một cách kỳ diệu, điều này khiến tôi rất nghi ngờ. Lý thuyết tốt nhất hiện tại của tôi là tôi đã gặp sự cố với .vimrcplugin hoặc plugin mà tôi đã vô tình sửa trong khi điều chỉnh thiết lập của mình theo một cách khác. Nếu tôi có thể theo dõi chính xác những gì tôi đã làm để sửa nó, tôi chắc chắn sẽ cập nhật với thông tin đó. Cảm ơn câu trả lời.


Tôi đã sửa nó trong Makefile bằng cách thêm vào -u NONE, nó báo cho vim không tải tập tin cấu hình nào cả. Có thể giúp đỡ trong một số tình huống.
Boldewyn

Câu trả lời:


14

Bạn có filetype offtrong vimrc của bạn? Hãy thử thay thế nó bằng:

filetype on
filetype off

Tôi gặp vấn đề này khi sử dụng mầm bệnh của Tim Pope trên OS X. Bài viết này đã giúp tôi giải quyết vấn đề. Nếu bạn đang sử dụng mầm bệnh ...

call pathogen#runtime_append_all_bundles()

... làm điều này thay vào đó:

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


đây là một quan điểm tốt. Tôi đã sửa vấn đề đặc biệt này, nhưng đó là điều khiến tôi nghi ngờ rằng tôi đã vô tình sửa một lỗi ở một nơi khác trong tôi .vimrc.
Hank Gay

Điều này đã khắc phục một vấn đề giống hệt tôi đối với tôi ngoại trừ với Vundle chứ không phải là mầm bệnh.
Jonah Braun

Cũng giống như thêm +1, đây là một bản sửa lỗi cũ, nhưng nó chỉ giúp tôi khắc phục vấn đề này bằng cách sử dụng Vundle trên hệ thống OSX. Chỉ cần ném filetype ontrên hiện có filetype off.
Mikey TK

8

Tôi có thể nghĩ về hai lời giải thích có thể.

  1. vimthực sự là một bí danh. Lưu ý rằng whichkhông hiển thị bí danh, bạn nên sử dụng typethay thế (trừ khi bạn đang chạy csh hoặc tcsh).

  2. Vim đi tìm một số tệp trong một đường dẫn liên quan đến thư mục cài đặt của nó, nó xác định từ việc xem argv[0](tên của tệp thực thi được truyền từ shell), và bằng cách nào đó không tìm thấy đường dẫn đó nếu nó được gọi thông qua một đường dẫn tương đối. Điều đó có thể về mặt kỹ thuật, nhưng tôi không nghĩ Vim thực sự làm điều đó.


7

Tôi nhận được một mã thoát không bằng không chỉ đơn giản là chạy vim và sau đó thoát.

Điều đó không xảy ra ở đây, với một hệ thống tương tự: Snow Leopard và phiên bản chứng khoán của Vim.

Hãy thử lệnh này:

$ sudo dtruss vim +q

Điều đó sẽ giúp bạn có một danh sách tất cả các tòa nhà mà Vim tạo ra trong khi nó khởi tạo và sau đó tắt ngay lập tức. ( dtrusstương đương với stracetrên Linux, nếu bạn đã sử dụng trước đó.)

Thứ bạn đang tìm kiếm là một dòng gần cuối hiển thị mã lỗi, thường là -1. Nhìn vào các đối số cho cuộc gọi hệ thống sẽ dẫn bạn đến vấn đề. Một khả năng cao là một tập tin bị thiếu, có thể sẽ hiển thị trên một open()cuộc gọi.

Nếu Vim thoát sạch khi chạy theo cách này, có lẽ bạn có vấn đề về quyền, điều sudocần thiết để cho phép dtrusschạy đang diễn ra. Trong trường hợp đó, bạn có thể sửa nó bằng cách sửa chữa quyền .


Xin lỗi - Tôi đang sử dụng máy làm việc của mình và nó không có hành vi này. Mặc dù vậy, tôi chắc chắn sẽ kiểm tra nó một lần nữa.
Hank Gay

Nếu bạn không thể tìm ra nó, hãy nối dtrussđầu ra cho câu hỏi của bạn. (Hoặc ít nhất, 25 dòng cuối cùng hoặc hơn.) Những gì không thể hiểu được đối với bạn có thể dẫn người khác đến câu trả lời đúng.
Warren Young

@nlucaroni: Vui mừng khi nghe nó. Tuy nhiên, đối với hậu thế, cái nào trong hai ý tưởng trong câu trả lời của tôi đã sửa nó? Đó là, bạn đã có một vấn đề về quyền mà sudo"đã sửa", cho bạn biết bạn cần chạy Quyền sửa chữa? Hay đúng hơn là nó dtrussđã cho bạn thấy một lỗi tòa nhà, và nếu vậy, cái nào và tại sao nó lại thất bại?
Warren Young

lỗi tòa nhà trong việc mở tập tin không có ở đó. Đồng nghiệp của tôi vừa lấy elses ai zipp'd .vimthư mục và .vimrc, và những thứ có đường dẫn đầy đủ và thiếu tập tin từ các plugin không sử dụng.
nlucaroni

2

Tôi đã gặp vấn đề mã trở lại này. Tôi truy nguyên nó trở lại một loadviewlệnh thực thi âm thầm trong vimrc của tôi, nó cung cấp các khung nhìn liên tục:

" 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

Khi nhập bộ đệm không có tên tệp, silent! loadviewsẽ thực thi, ẩn lỗi

E32: Không có tên tệp

mà cũng đã khiến mã trả về được đặt thành một.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.