thiết lập định dạng trong vimrc đang bị bỏ qua


9

Vim tự động tiếp tục nhận xét khi tôi nhấn Enter trong chế độ Chèn mà tôi thấy hữu ích.

Tuy nhiên, tôi không muốn bình luận tiếp tục sau khi nhấn 'o' từ chế độ bình thường để chèn một dòng mới bên dưới phần cuối của bình luận.

Tôi đọc rằng tôi cần xóa tùy chọn okhỏi tôi formatoptions, vì vậy tôi đặt dòng này ngay ở cuối tệp vimrc của mình:

set formatoptions-=o

Nhưng nó không thay đổi gì, và khi tôi thực hiện :set formatoptionstừ bên cạnh vim, nó cho tôi thấy định dạng của mình croql.

Làm thế nào để tôi thoát khỏi 'o'?

Biên tập:

Tôi đã làm theo một số bước được chỉ ra trong các ý kiến ​​của Sato Katsura:

Giải pháp bắt đầu bằng việc chạy :verb set fođể xem nơi định dạng được sửa đổi lần cuối.

Đây là đầu ra cho verb set fo:

  formatoptions=croql
        Last set from /usr/share/vim/vim73/ftplugin/vim.vim


1
@DJMcMayhem Điều đó không giải quyết được vấn đề của tôi. Như bạn có thể thấy, tôi đã thực hiện các phương pháp được đề xuất bởi các câu trả lời cho câu hỏi đó và hành vi của vim không thay đổi.
theonlygusti

1
Vâng tôi nhìn thấy điều đó. Tôi đã quá vội vàng với phiếu bầu gần của mình, vì vậy tôi đã rút lại bây giờ. Tuy nhiên, bây giờ có vẻ như là một vấn đề với bạn .vimrc, vì vậy chúng tôi không thể giúp đỡ cho đến khi bạn đăng nó. Tôi đoán một plugin thay đổi nó, hoặc nó không phải là nguồn chính xác.
James

2
Về cơ bản, câu hỏi là "tại sao dòng set formatoptions-=otrong vimrc của tôi không hoạt động?", Rằng điều này vô hiệu hóa các bình luận khi nhấn olà ngẫu nhiên :-)
Martin Tournoij

@Carpetsmoker yeah khá nhiều ... nó có cần chỉnh sửa không?
theonlygusti

Câu trả lời:


8

Khi vimbắt đầu, nó chạy $VIMRUNTIME/ftdetect.vimđể tìm loại tập tin bạn đang chỉnh sửa; sau đó, nếu bạn đã 'ftplugin'đặt, nó sẽ tìm nguồn $VIMRUNTIME/ftplugin.vimnào $VIMRUNTIME/ftplugin/&filetype.vim(xem :help startupđể biết thêm chi tiết).

Bạn có thể thay đổi hoặc ghi đè $VIMRUNTIME/ftplugin.vimhoặc $VIMRUNTIME/ftplugin/&filetype.vim. Tạo một thư mục và thư mục con trong thư mục nhà của bạn được gọi .vim/after.

Nếu bạn muốn ghi đè định dạng cho tất cả các plugin filetype, hãy chỉnh sửa $HOME/.vim/after/ftplugin.vim, nếu không thì chỉnh sửa $HOME/.vim/after/ftplugin/lua.vim(hoặc thay thế luabằng bất kỳ ngôn ngữ nào - trong trường hợp của bạn vim). Để biết giải thích thích hợp về cách thức hoạt động của nó, xem :help 'runtimepath'(và :help :runtime).

Đặt nội dung sau vào tệp:

set formatoptions-=o

Bạn có thể xem liệu nó hoạt động bằng cách chạy :scriptnames. Bạn sẽ nhận được một danh sách như sau:

  1: H:\script\vim\vimrc
  2: H:\script\vim\syntax\syntax.vim
  3: H:\script\vim\syntax\synload.vim
  4: H:\script\vim\syntax\syncolor.vim
  5: H:\script\vim\filetype.vim
  6: ~\vimfiles\ftdetect\log.vim
  7: ~\vimfiles\ftdetect\rdp.vim
  8: ~\vimfiles\ftdetect\scratch.vim
  9: ~\vimfiles\ftdetect\sqlite.vim
 10: ~\vimfiles\ftdetect\todo.vim
 11: H:\script\vim\ftplugin.vim
 12: ~\vimfiles\after\ftplugin.vim
 13: ~\vimfiles\colors\desert.vim
 14: H:\script\vim\defaults.vim
 15: H:\script\vim\plugin\getscriptPlugin.vim
 16: H:\script\vim\plugin\gzip.vim
 17: H:\script\vim\plugin\logiPat.vim
 18: H:\script\vim\plugin\manpager.vim
 19: H:\script\vim\plugin\matchparen.vim
 20: H:\script\vim\plugin\netrwPlugin.vim
 21: H:\script\vim\plugin\rrhelper.vim
 22: H:\script\vim\plugin\spellfile.vim
 23: H:\script\vim\plugin\tarPlugin.vim
 24: H:\script\vim\plugin\tohtml.vim
 25: H:\script\vim\plugin\vimballPlugin.vim
 26: H:\script\vim\plugin\zipPlugin.vim
 27: H:\script\vim\syntax\lua.vim
 28: H:\script\vim\ftplugin\lua.vim

Lưu ý dòng 11 và 12. Đường dẫn tệp của bạn sẽ trông hơi khác một chút.


1
Điều này có thể hữu ích cho một ai đó. Trong tình huống của tôi, tôi sử dụng vim-plug và một số plugin (tôi không biết cái nào) đã thay đổi formatoptions, tuy nhiên tôi .vim/aftercó nguồn gốc sau những plugin đó ...
voldikss

Tôi nghĩ rằng lệnh chính xác là :scriptnames.
Jari Turkia

Bằng cách thử và sai, tôi biết được rằng cố gắng để buộc formatoptionstrong ~/.vim/after/ftplugins.vimkhông làm việc - sau đó tôi gặp phải lập luận này mà sắp xếp của giải thích tại sao.
Stablesog

3

Tôi phát hiện ra rằng tôi có thể cung cấp một giải pháp tạm thời bằng cách sử dụng tự động.

Dòng sau trong .vimrctệp của bạn nên áp dụng định dạng mới ở mọi nơi:

autocmd FileType * set formatoptions-=o

Tuy nhiên, điều này không thực sự có thể giải quyết vấn đề; Tôi vẫn không hiểu tại sao một điều đơn giản setlà không đủ, và như đã được chỉ ra trong các bình luận, giải pháp này không lý tưởng.


1
Điều này có thể làm việc , nhưng nó rất kludgy và không phải là giải pháp tôi muốn giới thiệu.
James

@DJMcMayhem hmm, tôi có thể gặp phải vấn đề gì khi sử dụng giải pháp này? Xin vui lòng gửi câu trả lời cung cấp giải pháp tốt hơn, rõ ràng tôi thích nó hơn :)
theonlygusti

1
Tại sao không @DJMcMayhem? Vấn đề gần như chắc chắn là do một trong các bộ filetypes formatoptions(ví dụ Perl, Ruby và một số bộ khác đặt cái này). Đây dường như là một giải pháp chấp nhận được?
Martin Tournoij

@Carpetsmoker Tôi cho rằng điều đó công bằng. Tôi đã không nghĩ về điều đó. Có vẻ lạ khi thay đổi cài đặt trong autocmd, thay vì chỉ cài đặt trực tiếp.
James

2
@SatoKatsura Phụ thuộc vào những gì bạn muốn, tôi đoán. Một số người có thể không bao giờ thêm một ký tự nhận xét khi sử dụng obất kể kiểu tệp nào, trong trường hợp này có vẻ phù hợp.
Martin Tournoij

2

Tôi đã có một trải nghiệm tương tự như OP.

Tôi thấy rằng nó tđã được thêm vào của tôi formatoptionsmặc dù cố tình vô hiệu hóa nó.

Sau khi sử dụng :verbose set fođể chắc chắn rằng nó đến từ .vimrc, tôi nhận thấy rằng hành vi dường như phụ thuộc vào nơi tôi đặt định dạng trong tệp .vimrc của mình. Tôi phát hiện ra rằng nó đã xảy ra vì nơi tôi đã đặt set nocompatibletrong tệp của mình:

set formatoptions=qj
set nocompatible

:set fo?
  formatoptions=tcq

Nó chỉ ra rằng điều này được gọi cụ thể trong :help nocompatible:

                   'compatible' 'cp' 'nocompatible' 'nocp'
'compatible' 'cp'   boolean (default on, off when a |vimrc| or |gvimrc|
                    file is found, reset in |defaults.vim|)
            global
            {not in Vi}
    This option has the effect of making Vim either more Vi-compatible, or
    make Vim behave in a more useful way.

    This is a special kind of option, because when it's set or reset,
    other options are also changed as a side effect.
    NOTE: Setting or resetting this option can have a lot of unexpected
    effects: Mappings are interpreted in another way, undo behaves
    differently, etc.  If you set this option in your vimrc file, you
    should probably put it at the very start.

Sau khi làm theo lời khuyên tốt này, tôi formatoptionsđã được bảo tồn như mong muốn. Tôi không biết liệu OP có đang gặp phải vấn đề chính xác này hay đó là một số tương tác khác, nhưng tôi rất vui khi tìm hiểu nguyên nhân gây ra sự cố. Hy vọng rằng điều này sẽ giúp người khác tìm ra những gì (ban đầu không thể giải thích được) thay đổi cài đặt của họ.

Tôi cũng thích autocmd của theonlygusti - có một số tùy chọn tôi không bao giờ muốn đặt cho dù loại tệp. Tôi đang nhìn bạn , t.


2

Vì nhiều người dùng Vim của chúng tôi đang phải chịu đựng điều này, tôi đã đi và điều tra thêm một chút.

Giải pháp của tôi là tạo ra $HOME/.vim/after/ftplugin.vimnhư được đề xuất bởi @ abcq2 chỉ để nhận ra, nó sẽ không thay đổi bất cứ điều gì. Đưa ra danh sách được đưa ra bởi :scriptnames, tập tin đó là cách nguồn quá sớm. Tuy nhiên, đề xuất thứ hai về việc tạo $HOME/.vim/after/ftplugin/lua.vimtệp LUA sẽ giúp ích.

Bằng cách straceing, tôi đã học được rằng các plugin bổ trợ chung loại tệp có nguồn gốc trước các plugin sau loại tệp và loại tệp cụ thể có nguồn gốc sau loại tệp. Không trực quan lắm, nhưng đó là cách nó hoạt động.

Có nhiều thông tin trong blog của tôi về điều này.


Tôi không chắc tại sao bạn nghĩ rằng after/ftpluginsẽ giúp. Thay vào đó, cách tốt hơn là sử dụng các phần ghi đè cụ thể của filetype (sử dụng tự động FileType hoặc một after/<filetype>.vimtệp cụ thể ). Xem thêm sự giúp đỡ tại:h ftplugin-overrule
Christian Brabandt

Tôi nghĩ rằng nó sẽ giúp ích, bởi vì @ abcq2 đã gợi ý nó trong câu trả lời của anh ấy ở trên. Tôi nghĩ rằng tôi đang sử dụng after/<filetype>.vimtrong câu trả lời của tôi.
Jari Turkia

0

Tôi nhìn để xem những tập tin / đường dẫn nào vimđã tải, sử dụng strace(như được mô tả ở đây ), sau đó tạo một ~/.vim/after/plugin/thư mục (đó là vị trí cấu hình cuối cùng vimđã cố tải), sau đó liên kết tôi ~/.vimrcvào vị trí đó:

mkdir -p ~/.vim/after/plugin/
ln -s ~/.vimrc ~/.vim/after/plugin/ 

Tôi đã làm gì với strace:

Về cơ bản, tôi đã chạy:

strace -o ~/vim_strace vim

... Sau đó ngay lập tức bỏ vim( :q!). Tiếp theo, tôi tải lên ~/vim_strace( $ vim ~/vim_strace) và đi đến cuối ( :$). Sau đó, tôi bắt đầu đọc từ phía dưới để tìm dòng bắt đầu bằng openat(AT_FDCWD, "/home/karl/......

Điều đầu tiên tôi thấy là:

openat(AT_FDCWD, "/home/karl/.viminfo", O_RDONLY) = 3

Nhưng đó không phải là nơi tôi muốn tùy chọn cấu hình của mình. Dòng tiếp theo, ngay phía trên .viminfodòng, là:

openat(AT_FDCWD, "/home/karl/.vim/after/plugin/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)

... "Không có tập tin hoặc thư mục như vậy", eh? Có vẻ như là một người chiến thắng. Vì vậy, đó là người tôi đã chọn.

Bây giờ, hoạt động hoàn hảo.

Hy vọng điều này sẽ giúp ai đó ở đâu đó.


1
Xin lỗi, nhưng tôi không biết đây là câu trả lời cho câu hỏi này như thế nào. Bạn có thể vui lòng làm rõ và giải thích lý do tại sao điều này sẽ giải quyết vấn đề với định dạng?
filbranden

Bởi vì nó thực sự được vimtôn vinh các tùy chọn trong .vimrctập tin. Vui lòng đọc lại và đảm bảo rằng bạn hiểu, cả câu hỏi và câu trả lời của tôi.
Karl Wilbur

1) vimrc (toàn bộ) của bạn không thực sự phải chạy trên ngữ cảnh của plugin. 2) Một cái gì đó như thêm một dòng ~/.vim/after/plugin/formatoptions.vimvới set fo-=odễ đọc hơn ... Nhưng điều đó vẫn không hoạt động khi một trình cắm thêm kiểu tệp ghi đè lên điều đó. Ví dụ: mở Vim (không có tệp hoặc tệp không liên quan), sau đó sử dụng :eđể mở hoặc tạo *.vimtệp. Bạn sẽ thấy định dạng lại có otrong đó, vì nó được đặt cho bộ đệm đó ftplugin/vim.vimafter/plugintệp của bạn sẽ không thể ghi đè lên nó.
filbranden

Trong mọi trường hợp ... Câu trả lời của bạn không hoàn toàn rõ ràng về những gì bạn đang cố gắng thực hiện ở đây. Tôi có thể thấy (bây giờ?) Rằng bạn đang cố tải vimrc lần cuối trong quá trình khởi động, sau tất cả các trình cắm. Câu trả lời của bạn không thực sự nói lên điều đó, nó sẽ giúp ích nếu bạn bắt đầu bằng cách giải thích rằng ... Ngoài ra, trong khi strace là tốt và tất cả, trả lời "thư mục nào là cuối cùng" là khá dễ dàng, chỉ cần nhìn vào :set rtp?bạn sẽ thấy đó ~/.vim/afterlà Cuối cùng. Nhưng, như đã đề cập trước đây, điều này không thực sự hoạt động vì fosẽ được thiết lập lại bởi các plugin ft và đó thực sự là vấn đề ở đây.
filbranden

Nó hoàn toàn làm được, và nó hoàn toàn hoạt động. Tôi đã gặp vấn đề chính xác giống như OP sau khi nâng cấp lên Ubuntu 20.04. Giải pháp của tôi đã "sửa" nó, trong đó nó đã tải của tôi ~/.vimrc sau khi các plugin khác được tải, do đó cho phép tôi ~/.vimrcghi đè mặc định, như dự định.
Karl Wilbur
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.