Tự động hoàn thành trong Vim


258

Sau một thời gian dài "đào tạo", cuối cùng tôi cũng đã chuyển sang Vim; nhưng tôi có một số rắc rối với tự động hoàn thành. Làm thế nào tôi có thể có một đề nghị mã trong khi tôi đang gõ?

Tôi thường phát triển PHP, Ruby, HTML, C và CSS.

Câu trả lời:


143

Bạn có thể sử dụng một plugin như AutoComplPop để hoàn thành mã tự động khi bạn nhập.

Chỉnh sửa 2015: Cá nhân tôi sử dụng YouCompleteMe ngay bây giờ.


10
Điều này rất được khuyến khích. Nỗ lực hết sức để gõ CX CO, CP hoặc CN.
Amjith

Tôi đã thử điều này nhưng có vẻ như nó không hoạt động .. có lẽ có mâu thuẫn với các kịch bản khác ..
diegocstn

1
bạn đang đặt các tập tin vào các thư mục được chỉ định trong ~ / .vim?
michaelmichael

1
@dieguitoweb ACP không hoạt động với mọi kiểu tệp theo mặc định. Bạn phải "hack" nó để làm cho nó hoạt động với JavaScript, ActionScript và PHP. Ở đây tôi giải thích cách tôi làm điều đó. Và đây là một gợi ý khác cho PHP.
romainl

bây giờ nó hoạt động :) tất cả các tệp đã có trong các thư mục phù hợp .. Tôi chỉ thay thế tập lệnh bằng một bản tải xuống mới từ kho git và bây giờ thì ổn. cảm ơn rất nhiều
diegocstn

438

Sử dụng Ctrl- Nđể nhận danh sách các đề xuất từ ​​trong khi ở chế độ chèn. Nhập :help i_CTRL-Nđể xem tài liệu của Vim về chức năng này.

Dưới đây là một ví dụ về việc nhập từ điển Python vào Vim.


15
cảm ơn điều này thật tuyệt, nhưng làm cách nào tôi có thể có danh sách này một cách tự động mà không cần nhấn <ctrl + N>?
diegocstn

5
Đó là những gì michaelmichael đã nói với bạn với plugin mà anh ấy đề cập. Ngoài ra, bạn có thể nhìn vào SuperTab.
projecktzero

4
Để được hỗ trợ CSS, hãy thêm dấu gạch ngang để tự động hoàn thành bằng cách thêm 'set iskeyword + = -' vào .vimrc
mahalie

3
Đây là cách làm toàn diện và bản địa nhất :-)
Srikant

5
@ Hi-Angel, phần 'tự động' là phần tự động xác định các tùy chọn để hoàn thành một từ và tự động cạnh tranh từ đó khi chọn một tùy chọn.
CJBS

26

Nếu bạn đang sử dụng VIM phiên bản 8+, chỉ cần gõ Ctrl + nhoặc Ctrl + p.


11

Bạn có thể bắt đầu từ omnifunccài đặt tích hợp.

Chỉ cần đặt:

filetype plugin on
au FileType php setl ofu=phpcomplete#CompletePHP
au FileType ruby,eruby setl ofu=rubycomplete#Complete
au FileType html,xhtml setl ofu=htmlcomplete#CompleteTags
au FileType c setl ofu=ccomplete#CompleteCpp
au FileType css setl ofu=csscomplete#CompleteCSS

ở dưới cùng của bạn .vimrc, sau đó nhập <Ctrl-X><Ctrl-O>vào chế độ chèn.

Tôi luôn dựa vào sự hoàn thành CSS này.


setlnghĩa là gì Cảm ơn.
qed

Ok, tôi hiểu rồi, nó có nghĩa là setlocal. Nhưng tại sao chúng ta cần setlocal ở đây?
qed

Hãy xem làm thế nào nó làm phiền bạn khi bạn mở một tệp khác trong cùng bộ đệm.
ernix

2
@ernix Từ liên kết của bạn: Bộ đệm trong Vim là ... một phiên bản mở của tệp ... Tôi biết về bộ đệm, cửa sổ và tab; nhưng tôi không biết về việc mở một tệp khác trong cùng bộ đệm. Dường như với tôi rằng khi bạn mở một tệp, nó sẽ luôn mở trong một bộ đệm mới và thêm bộ đệm đó vào danh sách bộ đệm. Tôi biết có nhiều cách khác để sử dụng bộ đệm, chẳng hạn như danh sách sửa nhanh, nhưng tôi không biết về việc thay đổi tập tin nào trong bộ đệm. :h buffersnói: Bộ đệm là một tệp được tải vào bộ nhớ để chỉnh sửa. Điều đó nói rằng, tôi chỉ nghiêm túc sử dụng Vim trong 3 tháng. và chắc chắn là mở để điều chỉnh.
JakeD

1
@JakeD À đúng rồi. Bạn đúng. Tôi lấy "ví dụ" có nghĩa là sai cách. Tôi đã hiểu nhầm bạn đang nói về các quy trình với các PID khác nhau. Xin lỗi, hãy quên những gì tôi đã nói.
ernix


6

Gần đây tôi đã phát hiện ra một dự án có tên OniVim , một phần đầu dựa trên điện tử cho NeoVim đi kèm với tính năng tự động hoàn thành rất tốt cho một số ngôn ngữ, và về cơ bản nó chỉ là một trình bao bọc xung quanh NeoVim, bạn có toàn bộ sức mạnh của vim theo ý của bạn nếu GUI không đáp ứng nhu cầu của bạn. Nó vẫn đang được phát triển sớm, nhưng nó đang được cải thiện nhanh chóng và có một cộng đồng thực sự tích cực xung quanh nó. Tôi đã sử dụng vim hơn 10 năm và bắt đầu cho Oni lái thử vài tuần trước, và trong khi nó có một số lỗi ở đây và nó đã không theo cách của tôi. Tôi thực sự muốn giới thiệu nó cho những người dùng vim mới vẫn đang sử dụng ngón tay vim của họ!

nhập mô tả hình ảnh ở đây

OniVim: https://www.onivim.io/


32
với tôi toàn bộ quan điểm của vim là sử dụng thiết bị đầu cuối ... nếu tôi muốn sử dụng ứng dụng điện tử, tôi sẽ chỉ sử dụng vscode với phần mở rộng vim ..
Mohamed Benkedadra

2
@MohamedBenkedadra Nhưng điều đó có thực sự giúp bạn có được toàn bộ sức mạnh của Vim không? Tôi tình cờ là một fan hâm mộ lớn của hệ thống mẫu tìm kiếm và thay thế của nó, và tôi rất ngạc nhiên nếu một plugin giả lập vim hỗ trợ điều đó.
SilverWolf - Phục hồi Monica

3

Tôi đã sử dụng neocomplcache được khoảng nửa năm. Nó là một plugin thu thập bộ đệm từ trong tất cả các bộ đệm của bạn và sau đó cung cấp chúng để bạn tự động hoàn thành.

Có một loạt các ảnh chụp màn hình trên trang dự án trong liên kết trước đó. Neocomplcache cũng có rất nhiều tùy chọn cấu hình, trong đó có các ví dụ cơ bản trên trang dự án.

Nếu bạn cần thêm chiều sâu, bạn có thể xem phần có liên quan trong vimrc của tôi - chỉ cần tìm từ neocomplcache.


1

Đây là liên kết ! cho PHP.

nhấn phím Ctrl + x theo sau là phím Ctrl + o trong khi viết một số hàm PHP.

Cảm ơn Oseems Solutions cho hướng dẫn


1

Nếu bạn chỉ muốn tự động hoàn tất từ ​​bộ đệm của bộ đệm hiện tại, supertab dễ cài đặt hơn neocomplete , có thể hoạt động trên Mac vim được cài đặt sẵn mà không cần MacVim.

Bạn có thể kiểm tra các lựa chọn thay thế khác tại vim awesome .


0

Đối với PHP, Padawan với Deoplete là giải pháp tuyệt vời để có sự tự động hoàn thành PHP mạnh mẽ trong Neovim. Tôi đã thử rất nhiều thứ và Padawan làm việc như một cơ duyên!

Đối với Vim, bạn có thể sử dụng Neocomplete thay vì Deoplete.

Tôi đã viết một bài viết về cách tạo Vim PHP IDE nếu có ai đó quan tâm. Tất nhiên Padawan là một phần của nó.


0

Một lựa chọn khác là coc.nvim .

Nó thực sự nhanh và việc hoàn thành là tuyệt vời vì nó sử dụng intellisense cùng chế độ tự động hoàn thành như VScode đã có. Nó cũng có khả năng linting. Vì vậy, nó cho thấy bạn là bạn có thể có một lỗi. Nó hỗ trợ vô số ngôn ngữ.

Có thể mất một chút để thiết lập và định cấu hình nhưng tôi nghĩ đó là công cụ tự động hoàn thành tốt nhất cho vim ngoài kia.

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.