Vim -p: Bắt tín hiệu chết người SEGV?


11

Tôi gặp vấn đề này khi tôi bắt đầu Vim với -ptùy chọn. Giả sử, tôi bắt đầu với

vim -p first.txt second.txt

Sau đó, sau khi chỉnh sửa, first.txttôi chuyển sang second.txtsử dụng gt. Tôi nhấn phím ggGmột lần nữa. Điều này tạo ra lỗi

Vim: Caught deadly signal SEGV

Từ thời điểm này, Vim không phản hồi bất kỳ tín hiệu nào bao gồm Ctrl D. Tôi có thể đóng phiên này chỉ bằng cách giết thiết bị đầu cuối.

Vấn đề này chỉ phát sinh khi tôi gọi Vim với -ptùy chọn. Nếu tôi mở first.txttrước và sau đó sử dụng :tabeđể mở second.txt, vấn đề này không phát sinh.

Bất kỳ ý tưởng tại sao điều này có thể xảy ra?


Đầu ra của vim --version:

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan  2 2014 19:40:46)
Included patches: 1-52
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by buildd@
Huge version with GTK2-GNOME GUI.  Features included (+) or not (-):
+acl             +farsi           +mouse_netterm   +syntax
+arabic          +file_in_path    +mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
+balloon_eval    +float           +mouse_urxvt     -tag_any_white
+browse          +folding         +mouse_xterm     +tcl
++builtin_terms  -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         +gettext         -mzscheme        +textobjects
+clientserver    -hangul_input    +netbeans_intg   +title
+clipboard       +iconv           +path_extra      +toolbar
+cmdline_compl   +insert_expand   +perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    +keymap          +postscript      +virtualedit
+comments        +langmap         +printer         +visual
+conceal         +libcall         +profile         +visualextra
+cryptv          +linebreak       +python          +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con_gui  +lua             +rightleft       +windows
+diff            +menu            +ruby            +writebackup
+digraphs        +mksession       +scrollbind      +X11
+dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     +xim
+emacs_tags      +mouseshape      -sniff           +xsmp_interact
+eval            +mouse_dec       +startuptime     +xterm_clipboard
+ex_extra        +mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    +xpm
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "$VIM/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK  -pthread -I/usr/include/gtk-2.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/harfbuzz   -pthread -DORBIT2=1 -D_REENTRANT -I/usr/include/libgnomeui-2.0 -I/usr/include/libart-2.0 -I/usr/include/gconf/2 -I/usr/include/gnome-keyring-1 -I/usr/include/libgnome-2.0 -I/usr/include/libbonoboui-2.0 -I/usr/include/libgnomecanvas-2.0 -I/usr/include/gtk-2.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gnome-vfs-2.0 -I/usr/lib/i386-linux-gnu/gnome-vfs-2.0/include -I/usr/include/dbus-1.0 -I/usr/lib/i386-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/orbit-2.0 -I/usr/include/libbonobo-2.0 -I/usr/include/bonobo-activation-2.0 -I/usr/include/libxml2 -I/usr/include/pango-1.0 -I/usr/include/gail-1.0 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/atk-1.0 -I/usr/lib/i386-linux-gnu/gtk-2.0/include -I/usr/include/cairo -I/usr/include/gio-unix-2.0/ -I/usr/include/pixman-1 -I/usr/include/libpng12     -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1     -I/usr/include/tcl8.6  -D_REENTRANT=1  -D_THREAD_SAFE=1  -D_LARGEFILE64_SOURCE=1  
Linking: gcc   -L. -Wl,-Bsymbolic-functions -Wl,-z,relro -rdynamic -Wl,-export-dynamic -Wl,-E  -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed -o vim   -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype     -lgnomeui-2 -lSM -lICE -lbonoboui-2 -lgnomevfs-2 -lgnomecanvas-2 -lgnome-2 -lpopt -lbonobo-2 -lbonobo-activation -lORBit-2 -lart_lgpl_2 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lfreetype -lgconf-2 -lgthread-2.0 -lgmodule-2.0 -lgobject-2.0 -lglib-2.0   -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE  -lm -ltinfo -lnsl  -lselinux  -lacl -lattr -lgpm -ldl  -L/usr/lib -llua5.2 -Wl,-E  -fstack-protector -L/usr/local/lib  -L/usr/lib/perl/5.18/CORE -lperl -ldl -lm -lpthread -lcrypt -L/usr/lib/python2.7/config-i386-linux-gnu -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions  -L/usr/lib/i386-linux-gnu -ltcl8.6 -ldl -lz -lpthread -lieee -lm -lruby-1.9.1 -lpthread -lrt -ldl -lcrypt -lm  -L/usr/lib   

Đầu ra của uname -a:

Linux nitish 3.13.0-45-generic #74-Ubuntu SMP Tue Jan 13 19:37:48 UTC 2015 i686 i686 i686 GNU/Linux

Dựa trên những bình luận của @Carpetsmoker, tôi phát hiện ra rằng vấn đề là do .vimrctập tin của tôi . Vì vậy, tôi đã kiểm tra chạy lệnh gây ra sự cố với một số phần của .vimrctệp nhận xét. Cuối cùng tôi phát hiện ra rằng vấn đề là do đường dây

set columns=1000

Làm thế nào có thể lệnh vô tội như vậy gây ra vấn đề này? :help columnsđã không cung cấp bất kỳ thông tin hữu ích liên quan đến điều này.


2
bạn đang sử dụng vim (và mức độ vá) nào? (như đầu ra vim --version), và hệ điều hành nào? Bất kể, nó sẽ là một ý tưởng tốt để cập nhật vim. Nếu bạn đang sử dụng máy Mac và bạn sử dụng plugin ruby ​​(như lệnh-T), bạn có thể cài đặt lại chúng và / hoặc chắc chắn rằng vim đang sử dụng ruby ​​hệ thống chứ không phải rvm ruby ​​(dường như đã gây rắc rối cho một số người)
davidlowryduda

1
Bạn có thể bắt đầu vim vì vim -u NONE -p first.txt second.txt... Điều này sẽ ngăn tải tệp vimrc của bạn.
Martin Tournoij

@hatter Các vim đã được cài đặt hoặc biên dịch? Bạn có thể nâng cấp nó lên 7.4 và xem nếu nó giúp.
kenorb

@kenorb Vim đã được cài đặt.
nitishch 18/2/2015

@Carpetsmoker Nó hoạt động !! Điều này chắc chắn chỉ ra rằng có một vấn đề trong .vimrctập tin?
nitishch

Câu trả lời:


6

Tín hiệu SEGV, còn được gọi là segfault, hầu như luôn luôn là do lỗi trong chương trình bạn đang chạy trong trường hợp này, vim. (Các nguyên nhân khác là những thứ như phần cứng bị lỗi, hoặc một lần trong một mặt trăng xanh, lỗi kernel).

Vì vậy, thực sự, bạn cần báo cáo một lỗi. :help bug-reportscung cấp hướng dẫn về cách báo cáo lỗi. Có vẻ như bạn đã có một bộ các bước tối thiểu để tái tạo vấn đề, vì vậy đó là phần lớn công việc ở đó. Trước tiên, có lẽ bạn nên kiểm tra phiên bản mới hơn của Vim, để đảm bảo rằng nó chưa được sửa.


Tôi đang sử dụng Vim 7.4. Trang web chính thức cho biết đây là phiên bản mới nhất.
nitishch 19/2/2015

@hatter bạn có ít bản vá được áp dụng hơn là có sẵn.
derobert

Anh ấy đang chạy Debian, vì vậy điều đó giải thích rằng :-)
Martin Tournoij

@Carpetsmoker Tôi đang chạy Debian và đã trải qua bản vá 488 ... Tôi không chắc tại sao OP lại cũ hơn. Wheezy (bản phát hành hiện tại) có 7.3, vì vậy OP không sử dụng. Không ổn định, Jessie và Wheezy-Backports đều có 7.4 bản vá 488. (Được cung cấp, 640 là hiện tại, do đó vẫn còn hơi cũ.)
derobert

3

Nếu vim của bạn gặp sự cố do lỗi phân đoạn , điều đó cho thấy vi phạm quyền truy cập bộ nhớ do lỗi phần mềm hoặc sự cố phần cứng.

Nếu điều này xảy ra nhiều lần, bạn nên làm theo thứ tự:

  1. Vô hiệu hóa các plugin bằng cách chạy: vim -u NONEvà xem nếu điều đó giúp.
  2. Nâng cấp vim của bạn lên phiên bản ổn định mới nhất.
  3. Nâng cấp vim của bạn lên phiên bản phát triển mới nhất.
  4. Tùy chọn kiểm tra lại cùng một phiên bản vim trên các máy khác nhau (có thể do sự cố phần cứng).
  5. Cố gắng chạy vimtheo trình gỡ lỗi, ví dụ: gdb vimvà kiểm tra backtrace (sau SEGV, in gdb: type bthoặc bt full).
  6. Nếu backtrace không có biểu tượng, bạn đã biên dịch lại vim của bạn để bao gồm các biểu tượng này.
  7. Nếu bạn đã hoàn thành backtrace, vui lòng kiểm tra các sự cố tương tự hoặc báo cáo lỗi mới trong trình theo dõi lỗi của vim (đối với vim đơn giản) hoặc kiểm tra :help bugs. Nếu bạn có phiên bản khác của vim (như gVim, MacVim, NeoVim), vui lòng báo cáo cho các nhà bảo trì phù hợp.

2
Điều này chỉ xảy ra trên hệ thống của tôi. Không xảy ra với -u NONE. Có vẻ như dòng set columns=1000trong.vimrc là thủ phạm.
nitishch

0

Lỗi phân đoạn cũng có thể được kết nối với các máy chủ tương tác như netbeans và autocmdmột bộ đệm làm mất hiệu lực bộ đệm (ví dụ: BufNewFilehoạt động) mà một chương trình khác (plugin, ...) mong đợi (hoặc tương tự) trong .vimcấu hình, hãy thử nhận xét các dòng đó, ví dụ như .vimrc.

Thông báo lỗi điển hình là:

missing ! or / in <number>:<command>

nơi commandcó thể được ví dụeditFile

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.