Có thể tạo và sử dụng các menu trong vim (dựa trên thiết bị đầu cuối) không?


18

Tôi đang thiết lập các hộp Linux ảo hóa (như các máy chủ phát triển cục bộ) cho các nhà phát triển tại một công ty chủ yếu dựa trên Windows và một số nhà phát triển tạo ra các vết nứt tiêu cực về vim (trong số những thứ khác). (Dường như họ đại diện cho Linux / Unix theo một cách nào đó và chứng minh rằng môi trường rất khó sử dụng.) Tôi nhớ khi lần đầu tiên tôi buộc phải sử dụng vim, (các sysadmin đã từ chối cài đặt emacs!) Học đường, nên tôi có phần thông cảm. Tôi nhận thấy rằng, thay vì giới thiệu cho họ nano(điều mà có lẽ họ sẽ không bao giờ vượt qua), có thể thiết lập các menu giống như nano trong vim để giúp quá trình chuyển đổi dễ dàng hơn. (Tôi đã tìm thấy một tệp .vimrc rất thân thiện với người mới bắt đầu để cung cấp cho họ, nhưng nó không có bất cứ thứ gì như các menu kiểu nano.)

Vấn đề duy nhất là điều duy nhất tôi có thể thấy rằng tuyên bố rằng có thể thiết lập các menu trong vim (không phải gvim) không hoạt động và những nỗ lực của tôi để khắc phục vấn đề chỉ còn lại cho tôi một vấn đề khác cần giải quyết. Trước khi tôi lãng phí rất nhiều thời gian tôi muốn biết liệu thực tế có khả thi hay không, vì dường như có rất ít thông tin về cách thực hiện.


3
Bây giờ đây là trong Vim giúp đỡ : :h console-menus.
Alexey

@Alexey: cảm ơn! Điều đó rất hữu ích để biết ... nếu tôi cuộn xuống phần "5.2 Tạo thực đơn mới" có vẻ như nó sẽ làm những gì tôi muốn.
iconoclast

Câu trả lời:


18

Vâng, nó là có thể. Bạn có thể tải menu.vim(các định nghĩa trình đơn gvim mặc định) hoặc bạn chỉ có thể bắt đầu từ đầu và tạo riêng của mình, sau đó truy cập chúng qua :emenu. Tuy nhiên, điều này không cung cấp cho bạn các menu hiển thị giống như nano; nó cung cấp cho bạn khả năng điều hướng các menu bằng cách sử dụng hoàn thành tab dòng lệnh.

Nếu người dùng không có vimrc, bạn sẽ muốn bắt đầu bằng cách vô hiệu hóa tính tương thích vi:

:set nocompatible

Kích hoạt tính năng thông minh hoàn thành dòng lệnh trên <Tab>(cho phép liệt kê tất cả những lựa chọn có thể, và điều hướng các kết quả với <Up>, <Down>, <Left>, <Right>, và <Enter>):

:set wildmenu

Thực hiện lặp lại chu kỳ nhấn giữa tất cả các lựa chọn phù hợp:

:set wildmode=full

Tải các menu mặc định (điều này sẽ tự động xảy ra trong gvim, nhưng không phải trong terminal vim):

:source $VIMRUNTIME/menu.vim

Sau bốn lệnh đó, bạn có thể kích hoạt hoàn thành menu theo cách thủ công bằng cách gọi hoàn thành tab trên :emenulệnh, bằng cách thực hiện:emenu<space><tab>

Bạn có thể điều hướng kết quả bằng phím tab và phím mũi tên và phím enter (cả hai đều mở rộng menu con và chọn các mục). Sau đó, bạn có thể làm cho điều đó thuận tiện hơn bằng cách tiến thêm một bước và ràng buộc ánh xạ để bật menu mà không cần phải gõ :emenumỗi lần:

Tạo Ctrl-Z trong hành động ánh xạ như nhấn <Tab>tương tác trên dòng lệnh:

:set wildcharm=<C-Z>

Và tạo một ràng buộc tự động gọi :emenuhoàn thành cho bạn:

:map <F4> :emenu <C-Z>

2
Xuất sắc! Hãy cho tôi biết làm thế nào tôi có thể mua cho bạn một ly bia!
iconoclast

2

Bản thân tôi đã gặp vấn đề là tôi không thể nhớ tất cả các lệnh và tổ hợp phím cho các plugin tôi đang sử dụng. Thêm vào đó, tôi muốn có những cách đơn giản để thực hiện nhanh chóng các lệnh mà không phải thiết lập ánh xạ khóa mới hoặc phát minh ra các lệnh để truy cập chúng.

Vim-Venu

Tôi đã viết một plugin menu vim nhỏ cho phép bạn xác định các menu cho từng kiểu tệp mà bạn có thể chỉnh sửa bằng vim. Bằng cách này, bạn có thể xác định tùy chọn menu 'Biên dịch' cho các kiểu tệp khác nhau và bắt đầu các hướng dẫn chính xác để biên dịch mã tùy thuộc vào tệp bạn đang chỉnh sửa (.py, .c, .c ++, ...). Hoặc tạo một menu con cho các lệnh plugin 'Bảng' trong tệp đánh dấu.

Kiểm tra nó ở đây: https://github.com/Timoses/vim-venu

Như một lưu ý phụ: Tôi nghĩ mọi người nên chọn trình soạn thảo văn bản yêu thích của riêng mình. Vim có một rào cản nhỏ (đáng để học hỏi!). Nếu ai đó không sẵn lòng học hỏi, thì vim sẽ không được sử dụng nhiều cho người đó.

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.