Làm cách nào tôi có thể khiến Vim bỏ qua tất cả cấu hình người dùng, như thể nó được cài đặt mới?


21

Để đảm bảo hành vi không bị ảnh hưởng bởi cấu hình cá nhân của tôi, tôi muốn khởi động Vim theo cách bỏ qua tất cả các tệp cấu hình do người dùng cài đặt, như thể Vim mới được cài đặt lần đầu tiên và người dùng đã chạy nó ngay.

Điều này được giải quyết trong FAQ cho thấy câu trả lời là bắt đầu Vim bằng lệnh sau:

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

Điều này được hầu hết theo cách đó, nhưng runtimepathtùy chọn vẫn chứa ~/.vimvà đáng chú ý là ~/.vim/after(ví dụ: nếu sau đó tôi bật phát hiện loại tệp và thay đổi kiểu tệp, mã trong ~/.vim/after/syntax/the_relevant_filetype.vimsẽ được thực thi).

Tôi có thể giải quyết vấn đề cụ thể này bằng cách gọi các lệnh sau khi khởi động *:

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

... nhưng tôi không chắc nếu:

  1. Đây là một giải pháp mạnh mẽ: Có phải đó là những đường dẫn duy nhất có thể khiến cấu hình người dùng có hiệu lực? Có điều gì khác tôi chưa từng nghĩ đến?
  2. Có một cách tốt hơn để đạt được kết quả mong muốn.

* Bằng cách sử dụng --cmdhoặc -u vimrcshell đối số, hoặc đơn giản bằng cách nhập chúng bằng tay.

EDIT : Đây là một ví dụ cụ thể về loại sự cố tôi đang cố gắng khắc phục. (Mặc dù tôi muốn giải pháp khắc phục mọi sự cố có thể khác mà tôi có thể chưa gặp phải.):

  1. Tạo một tệp ~ / .vim / after / ftplugin / c.vim, chứa nội dung:

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

    Bây giờ chúng tôi có một số cấu hình do người dùng cài đặt mà chúng tôi muốn bỏ qua. Hãy thử nghiệm giải pháp được đề xuất bởi FAQ.

  2. Chạy Vim bằng lệnh:

    vim -u NONE -U NONE -N -i NONE
    
  3. Nhập các lệnh:

    :filetype plugin on
    :set ft=c
    i
    

Hành vi mong muốn : Vim nên vào chế độ Chèn. Đây là những gì nó sẽ làm nếu không có cấu hình người dùng tồn tại.

Hành vi quan sát : Vim in ra "Đây không phải là hành vi mặc định"


Trên một hệ thống giống như Unix, nếu bạn làm gì : HOME=/dev/null vim -u NONE?
muru

@muru Ý tưởng hay, và có lẽ đáng để thêm vào như một câu trả lời, nhưng nó không hoàn hảo . Bạn rõ ràng mất khả năng :cd ~, ví dụ , nhưng vị trí mặc định của viminfotệp nằm trong $ HOME, có thể gây ra E138. Tôi đoán việc tạo một thư mục mới, trống và sử dụng thư mục đó cho $ HOME có thể là giải pháp tốt nhất.
Giàu có

@muru Chỉ xảy ra với tôi rằng nếu bạn đang đặt $ HOME, thì có lẽ bạn cũng không cần chỉ định -u NONE?
Giàu có

1
trong trường hợp đó /tmpcó thể tốt hơn, đó là suy nghĩ đầu tiên của tôi, nhưng sau đó tôi đã chọn / dev / null làm lỗ đen. ... Hoặc một cái gì đó như HOME=$(mktemp -d) vim ....
muru

Nó sẽ không đọc hệ thống vimrc nếu bạn không sử dụng -u NONE? Phụ thuộc vào hành vi bạn cần, tôi cho rằng.
muru

Câu trả lời:


16

Kể từ Vim 8.0.1554 (tiếc là chưa có Neovim), bạn có thể sử dụng vim --clean. Phương pháp này được khuyến nghị bởi :help bugs.

:help --clean tài liệu:

Tương tự như "-u DEFAULTS -U NONE -i NONE":
- việc khởi tạo từ các tệp và biến môi trường bị bỏ qua
- 'runtimepath' và 'packpath' được đặt để loại trừ các mục trong thư mục chính (không xảy ra với -u DEFAULTS).
- mặc định.vim | tập lệnh được tải, hàm ý 'không tương thích': sử dụng mặc định Vim
- không | gvimrc | tập lệnh được tải
- không có tập tin viminfo nào được đọc hoặc ghi


1
Tốt đẹp! Điều này đơn giản hơn nhiều so với việc làm rối tung $HOMEbiến. Nhà phát triển Goodjob Vim. Và cảm ơn bạn đã trả lời!
Giàu

1
--cleancũng hoạt động với neovimchủ ngay bây giờ ( github.com/neovim/neovim/commit/ , được bao gồm trong 0.4.0), nhưng không loại trừ thư mục chính.
Christian Clason

(tuy nhiên, bản vá đó đang chờ được chuyển)
Christian Clason

11

Một cách để loại bỏ các tệp cụ thể của người dùng là sử dụng một giá trị khác $HOME. Để cho phép không có gì để đọc hoặc ghi vào (chẳng hạn như viminfo), bạn có thể sử dụng /dev/null:

HOME=/dev/null vim -u NONE

Điều này sẽ gây ra lỗi về viminfo, vì vậy, thay vào đó, bạn có thể tạo một thư mục tạm thời hoặc sử dụng một thư mục hiện có (như /tmp):

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

Với như vậy $HOME, -u NONEcó thể không cần thiết, tùy thuộc vào những gì quản trị viên của bạn đã thêm vào toàn hệ thống vimrc. Ví dụ, trên tất cả các hệ thống phòng thí nghiệm tôi quản lý, tôi đã thêm một /etc/vim/vimrc.local(có nguồn gốc theo mặc định Vim đóng gói của /etc/vim/vimrc) mà có nocompatible, syntaxvv, thiết lập, và filetype onlà tốt.


3
vim -i KHÔNG để tải viminfo
Christian Brabandt

1

Tôi không thể trả lời nhiều về điều đó nhưng một điểm mà tôi không thấy được đề cập, và đang trả lời một cách giải thích về những gì trong tiêu đề

Làm cách nào tôi có thể khiến Vim bỏ qua tất cả cấu hình người dùng, như thể nó được cài đặt mới?

một số đã đề nghị vim -u NONE hoặcvim -u NORC

trong một số trường hợp, một số ít barebones hơn là không có tệp vimrc. Khi tôi gõ 'i', nó không nói 'chèn'. Bạn có thể muốn nó vẫn nói 'chèn'. Nếu bạn bắt đầu vim với tệp vimrc của bạn trống thì nó sẽ hiển thị chèn

đó là vì vim tải cấu hình mặc định trước.

Bạn có thể trỏ vim vào tệp mặc định đó để làm cho hiệu ứng của tệp vimrc của bạn trống. Kiểm tra xem bạn có /etc/vim/vimrcvà bạn có thể làm vim -u /etc/vim/vimrc hoặc trên osx, tệp mặc định là/usr/share/vim/vicmrc


Tôi nghĩ đó chính xác là những gì vim --clean sẽ làm cho bạn.
quemeraisc

@quemeraisc vim --cleansẽ tải defaults.vim. Câu trả lời này đề cập đến hệ thống vimrc (Xem :help system-vimrc.), Mà tôi nghĩ là không được tải bởi vim --clean.
Giàu

@barlap: Để tránh nhầm lẫn với defaults.vim (xem :help defaults.vim), có thể là tốt hơn để thay đổi cách diễn đạt default configđể system vimrctrong câu trả lời này. Hoặc thậm chí tốt hơn, thảo luận cả trong câu trả lời!
Giàu

0

Từ Vim-FAQ 2.5 :

2.5. Tôi có một vấn đề "xyz" (một số) với Vim. Làm cách nào để xác định đó là sự cố với thiết lập của tôi hoặc với Vim? / Tôi đã tìm thấy một lỗi trong Vim?

Trước tiên, bạn cần tìm hiểu xem lỗi có trong các tệp thời gian chạy thực tế hay bất kỳ plugin nào được phân phối với Vim hay đó là tác dụng phụ đơn giản của bất kỳ tùy chọn cấu hình nào từ .vimrc hoặc .gvimrc của bạn. Vì vậy, trước tiên, bắt đầu vim như thế này:

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

điều này khởi động Vim ở chế độ không tương thích (-N), mà không đọc tệp viminfo của bạn (-i NONE), mà không đọc bất kỳ tệp cấu hình nào (-u NONE vì không đọc tệp .vimrc và -U NONE vì không đọc tệp .gvimrc) hoặc thậm chí plugin.


1
Mặc dù nằm trong FAQ, nhưng điều này không thực sự hoạt động, vì những lý do được đề cập trong câu hỏi.
Giàu có

@Rich Từ nhận xét của bạn về câu hỏi: ensure that none of the behaviour I'm seeing is caused by user config- thì có vẻ như bạn đang cố gắng thực hiện chính xác những gì đang được giải thích trong Câu hỏi thường gặp này. Tôi đã đọc lại câu hỏi của bạn và vẫn không hiểu lý do bạn đề cập là gì.
mMontu

Tôi thực sự đang cố gắng làm chính xác những gì đang được giải thích trong FAQ. Nhưng giải pháp mà nó đưa ra không hiệu quả, vì runtimepathcài đặt.
Giàu

Chính xác thì điều gì là sai runtimepath? Có vẻ như mặc định cho tùy chọn này, như được giải thích trong :help rtp. Giá trị này ảnh hưởng đến bài kiểm tra của bạn như thế nào?
mMontu

@ Ý tôi là, bạn có thấy sự khác biệt nào khi so sánh với bản cài đặt mới sau khi bạn bật phát hiện filetype không?
mMontu
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.