Làm cách nào để gỡ lỗi tệp vimrc của tôi?


80

Tôi có một vấn đề trong Vim và tôi nghĩ rằng nó có thể nằm trong vimrctệp của tôi (hoặc đã được thông báo rằng đó có thể là vimrctệp của tôi ).

Làm thế nào để tôi xác minh điều này? Nếu đó vimrc tập tin của tôi , làm thế nào để tôi biết chính xác vấn đề nằm ở đâu?

Câu trả lời:


79

Điều đầu tiên bạn muốn làm là khởi động Vim với các cài đặt mặc định:

vim -u NONE -U NONE -N

Việc -u NONEngăn Vim tải vimrc của bạn, -U NONEngăn Vim tải gvimrc của bạn và -Nbảo Vim sử dụng chế độ không tương thích (điều này không bắt buộc, nhưng hầu hết người dùng Vim không được sử dụng chế độ "tương thích"). Lưu ý rằng NONEcần thiết để có trong tất cả các mũ.

Trong Windows, bạn có thể thêm các cờ này bằng cách tạo lối tắt mới 1 .

  • Nếu vấn đề vẫn còn, thì bạn biết đó không phải là thứ gì đó trong vimrc của bạn.

  • Nếu vấn đề biến mất, bạn bây giờ nó gây ra bởi một cái gì đó trong tập tin vimrc của bạn.

Đó không phải là vimrc của tôi!

Tiếng hoan hô! Đi và đặt câu hỏi của bạn. Hãy chắc chắn đề cập rằng bạn đã thử bắt đầu Vim mà không có tệp vimrc!

Vậy đó là vimrc của tôi, bây giờ thì sao?

Nếu bạn chưa có, có lẽ bạn muốn lưu bản sao lưu của tệp vimrc trước.

Kiểm tra các plugin

Điều tiếp theo bạn có thể muốn làm là vô hiệu hóa tất cả các plugin trước; plugin có thể thay đổi khá nhiều trong Vim. Nếu đây sửa chữa vấn đề, sau đó cố gắng tìm hiểu plugin bằng cách tái tạo điều kiện cho họ một-by-one. Sau khi bạn phát hiện ra plugin nào chính xác gây ra sự cố, bạn có thể thử và khắc phục bằng cách đọc tài liệu của plugin này và / hoặc bằng cách đặt câu hỏi được gắn thẻ plugin-<name>.

Nếu đó là không một plugin, và bạn không có bất kỳ ý tưởng gì gây ra vấn đề của bạn, thì đó là một thủ tục thử nghiệm và báo lỗi. Nhận xét một hoặc nhiều dòng trong vimrc của bạn, khởi động Vim, kiểm tra xem sự cố xảy ra và lặp lại quy trình này cho đến khi sự cố dừng xảy ra. Cách nhanh nhất để làm điều này là:

  1. Nhận xét (hoặc xóa) khoảng một nửa tệp vimrc của bạn.
  2. Khởi động lại Vim hoặc mở Vim mới (tải lại vimrc là không đủ, vì cài đặt không được đặt).
  3. Bây giờ vấn đề đã biến mất? Đặt lại phần bạn đã xóa (giữ Vim mở và sử dụng hoàn tác là hữu ích ở đây) và lặp lại bước 1 trên phần bạn đã thêm lại.
  4. Vấn đề vẫn còn xảy ra? Chuyển đến bước 1.

Cuối cùng, bạn nên có một tùy chọn duy nhất hoặc kết hợp một vài tùy chọn gây ra vấn đề của bạn. Bạn có thể tìm hiểu thêm về bất kỳ tùy chọn nào trong Vim bằng cách sử dụng:

:help 'option_name'

Các trích dẫn rất quan trọng ở đây, nó thường hoạt động mà không có chúng, nhưng đôi khi bạn kết thúc trên trang sai nếu bạn bỏ qua chúng.

Nếu bạn vẫn còn bối rối sau khi đọc trang trợ giúp, bạn sẽ biết nơi để đặt câu hỏi ;-)

Gỡ lỗi một plugin

Nếu bạn muốn cô lập một plugin, có lẽ để đặt câu hỏi về nó, bạn muốn tải ít nhất có thể nhưng vẫn tải plugin; bạn có thể dễ dàng làm điều này với tính năng gói của Vim. Điều này đòi hỏi Vim 8 hoặc một phiên bản hợp lý gần đây của Neovim.

  1. Tạo một thư mục trống mới; chúng ta sẽ sử dụng ~/pluginđường dẫn trong ví dụ này. Bây giờ đặt plugin trong pack/plugins/start/$namethư mục thông thường . Ví dụ:

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. Tạo một test-vimrctập tin với các nội dung sau đây; điều này sẽ đảm bảo rằng Vim sẽ load plugin từ ~/pluginthư mục và không các ~/.vim thư mục:

    set nocompatible
    set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
    packloadall!
    
    syntax on
    filetype plugin indent on
    
  3. Bắt đầu Vim với:

    vim -U NONE -u ~/test-vimrc
    

    Bây giờ bạn có một vimrc tối thiểu chỉ với plugin này.


Chú thích

1 Ví dụ: trên Windows 64 bit, phím tắt sẽ trông giống như thế này : "C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N. Để tạo nó, nhấp chuột phải vào File Explorer nơi bạn muốn phím tắt, sau đó chọn Mới -> Phím tắt và dán văn bản phím tắt. Bạn có thể cần thay đổi đường dẫn Vim nếu Vim của bạn được cài đặt ở một vị trí khác.


7
Kỹ thuật này được gọi là Bản địa hóa lỗi tìm kiếm nhị phân .
tommcdo

2
Sau khi bạn phát hiện ra lỗi của mình, đây sẽ là thời điểm tuyệt vời để bắt đầu giữ .vimrc của bạn dưới sự kiểm soát phiên bản :) Gần như luôn luôn là một trong những thay đổi cuối cùng mà bạn thực hiện đối với nó khiến mọi thứ hoạt động kỳ lạ.
escrafford

1
Bạn không cần -U NONEnếu bạn có -u NONE.
Antony

@MartinTournoij Tôi đã đề xuất một chỉnh sửa để giúp người đọc lần đầu hiểu dễ dàng hơn. Tôi hy vọng bạn thích nó. Cảm ơn!
jpaugh

1
Cảm ơn @jpaugh; Tôi nghĩ rằng thứ tự đó có ý nghĩa hơn.
Martin Tournoij

31

-Dtham số Vim đặc biệt để gỡ lỗi sẽ chuyển sang chế độ gỡ lỗi sau khi thực hiện lệnh đầu tiên từ tập lệnh.

Ví dụ: để chạy Vim trong chế độ gỡ lỗi mà không cần bất kỳ plugin nào, hãy chạy như sau:

vim --noplugin -D

Nhập n/ nextđể phân tích dòng tiếp theo và tiếp tục nhấn Enter.

conthoặc qđể trở lại vimgiao diện.

Nếu bạn đang sử dụng phiên bản GUI, hãy đặt một guilệnh trong vimrc của bạn để bắt đầu gỡ lỗi ngay sau lệnh đó.

Nhấn Ctrl+ dđể xem danh sách các lệnh khả dụng

Đọc thêm:


1
Điều này hữu ích nhất trong việc tìm một lỗi đơn giản trong tệp .vimrc gây ra thông báo lỗi. Đáng để thử điều này đầu tiên vì nó nhanh chóng để làm.
RichVel

1
@kenorb Lệnh này thật tuyệt vời, hãy cứu tôi khỏi việc đi đến một trình soạn thảo khác.
TheLazyChap

11

Như đã đề cập, trước tiên hãy cố gắng vim -u NONE -U NONE -Nđảm bảo vanilla vim của bạn hoạt động tốt.

Sau đó bắt đầu vim bình thường và kiểm tra

:messages

từ bên trong vim sau sự cố, sẽ hiển thị tất cả các cảnh báo và lỗi.

Cuối cùng bắt đầu vim với lệnh sau

vim -V9logfile.log

mà sẽ tạo ra một logfile gọi logfile.log, -V9là mức khai thác gỗ và cố gắng tái tạo vấn đề của bạn.


11

Thêm một mẹo nữa: với tư cách là người thượng cổ, tôi thực sự thích thêm: echom "message" vào .vimrc của tôi để xem những gì đang được thực thi và những gì không.

Ví dụ

if executable('ag')
  :echom "AG FOUND"

  ...
endif

Điều này giúp tôi nhanh chóng xem nếu khối if đang được thực thi, v.v. Thông báo sẽ được in trên bàn điều khiển vào lần tới khi bạn bắt đầu vim.


6
Và nếu bạn sử dụng echommột lệnh thú vị khác là :messageslấy nhật ký đầy đủ của các tin nhắn được lặp lại. Đôi khi có thể hữu ích để xem xét chúng sau khi khởi động.
statox

Đây gần như là những gì tôi cần, tôi muốn xem giá trị của các đoạn trích ở điểm nào trong vimrc của tôi, làm thế nào để tôi lặp lại đầu ra của ": set cpoptions?" ?
Mike Lippert

10

Một điều mà tôi đã tìm thấy giúp giữ một bộ sưu tập các biến để chuyển các phần của bạn .vimrcđể bạn có thể vô hiệu hóa hoặc kích hoạt các phần của nó mà không cần phải bình luận. Nó cũng có tác dụng phụ dễ chịu khi buộc bạn phải suy nghĩ về tổ chức của bạn .vimrc.

" feature toggles in vimrc
let g:vimrc_feat_pathogen               = 1
let g:vimrc_feat_core_minimal           = 1
let g:vimrc_feat_matchit                = 1
let g:vimrc_feat_options                = 1
let g:vimrc_feat_colors_and_highlight   = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding          = 1
let g:vimrc_feat_autocommand_group      = 1
let g:vimrc_feat_custom_definitions     = 1
let g:vimrc_feat_load_opam              = 1

Đây là một ví dụ về một phần được bảo vệ bởi if:

if g:vimrc_feat_core_minimal
    set nocompatible
    filetype plugin indent on
    syntax on
endif

1

Thời gian tải vimrc của tôi rất chậm, khoảng 400ms và tôi đã giảm xuống còn 20ms chỉ bằng cách xóa dòng này:

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1

Hãy chắc chắn rằng bạn không có lệnh gọi bên ngoài như thế.


1
Chào mừng đến với trang web! Đây là một mẩu tin hữu ích, nhưng nó khá cụ thể hơn một chút so với câu hỏi rất chung chung. Nó có thể được thêm vào tốt hơn như một câu trả lời cho ví dụ câu hỏi này , hoặc, nếu bạn chỉ muốn chia sẻ kiến ​​thức, có lẽ bạn có thể hỏi và trả lời câu hỏi của chính mình?
Giàu

0

Đây là một thủ tục đơn giản vey để giúp bạn bắt đầu.

  1. nhận xét nội dung của toàn bộ tệp .vimrc của bạn
  2. tải lại .vimrc của bạn bằng cách chạy :source %hoặc:so $MYVIMRC
  3. uncomment một phần kín đáo của tập tin (thường bắt đầu từ đầu)
  4. Lặp lại bước 2 và 3 cho đến khi bạn tìm thấy lỗi.
  5. sửa lỗi.

1
Câu trả lời này có thể tốt hơn rất nhiều nếu bạn viết hoa đúng và chấm câu.

Rất khuyến khích làm điều này với một tìm kiếm nhị phân.
D. Ben Knoble
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.