Tôi không biết cách tốt nhất để quản lý hơn 500 chữ viết tắt. Có thể về lâu dài, như @statox đã giải thích, bạn có thể xem qua các đoạn trích để giảm con số này.
Và nếu bạn muốn tự động hoàn thành các chữ viết tắt, bạn có thể thử đoạn mã sau:
augroup GetAbbrev
autocmd!
autocmd VimEnter * let s:abbrev_list = [] |
\ call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(s:abbrev_list, submatch(1))', 'gn')
augroup END
set completefunc=CompleteAbbrev
function! CompleteAbbrev(findstart, base)
if a:findstart
return searchpos('\<\k', 'bcnW', line('.'))[1] - 1
else
return filter(copy(s:abbrev_list), 'v:val =~ "^" . a:base')
endif
endfunction
Để sử dụng nó, bạn sẽ phải nhấn C-x C-u
sau khi bắt đầu viết tắt.
Autocmd thiết lập biến s:abbrev_list
chứa tất cả các chữ viết tắt của bạn.
Hàm CompleteAbbrev()
sẽ trả về một danh sách các ứng cử viên dựa trên từ trước con trỏ.
Các 'completefunc'
giá trị của tùy chọn nói với Vim mà hàm nào để gọi khi bạn nhấn C-x C-u
.
Lưu ý rằng tùy chọn này là cục bộ của bộ đệm, vì vậy bạn vẫn có thể sử dụng các chức năng khác trong các loại bộ đệm khác nhau, bằng cách sử dụng autocmd và FileType
sự kiện chẳng hạn.
Xem :h complete-functions
để biết thêm thông tin về cách hoạt động của chức năng.
Một giải pháp khác là sử dụng hoàn thành từ đồng nghĩa. Từ :h i_^x^t
:
*i_CTRL-X_CTRL-T*
CTRL-X CTRL-T Works as CTRL-X CTRL-K, but in a special way. It uses
the 'thesaurus' option instead of 'dictionary'. If a
match is found in the thesaurus file, all the
remaining words on the same line are included as
matches, even though they don't complete the word.
Thus a word can be completely replaced.
For an example, imagine the 'thesaurus' file has a
line like this:
angry furious mad enraged
Placing the cursor after the letters "ang" and typing
CTRL-X CTRL-T would complete the word "angry";
subsequent presses would change the word to "furious",
"mad" etc.
Other uses include translation between two languages,
or grouping API functions by keyword.
Để sử dụng giải pháp này, bạn sẽ phải làm 3 việc:
- Viết
{lhs}
tất cả các chữ viết tắt của bạn trong một tập tin chuyên dụng.
Ví dụ , /home/user/mysynonyms.txt
. Và nhóm chúng xung quanh các chủ đề tương tự.
Thêm đường dẫn đến tệp này vào tùy chọn 'thesaurus'
:
set thesaurus+=/home/user/mysynonyms.txt
Nhấn C-x C-t
sau khi bắt đầu tên của bất kỳ chữ viết tắt trong một nhóm.
Ví dụ: giả sử bạn có các chữ viết tắt sau:
iab cfa CFuncA
iab cfb CFuncB
iab cfc CFuncC
iab jfa JavaFuncA
iab jfb JavaFuncB
iab jfc JavaFuncC
iab pfa PhpFuncA
iab pfb PhpFuncB
iab pfc PhpFuncC
Bạn có thể nhóm chúng theo ngôn ngữ lập trình mà chúng thuộc về.
Bên trong /home/user/mysynonyms.txt
, bạn sẽ viết:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
Bây giờ, bất cứ khi nào bạn nhấn vào C-x C-t
sau tên viết tắt (hoặc chỉ bắt đầu), Vim sẽ hiển thị, trong menu bật lên, tất cả các chữ viết tắt trên cùng một dòng.
Đây là giao diện của nó:
Lưu ý rằng các chữ viết tắt không cần bắt đầu với cùng một ký tự được nhóm, chúng có thể hoàn toàn khác nhau. Miễn là chúng nằm trên cùng một dòng trong tệp từ đồng nghĩa của bạn, Vim sẽ hiển thị tất cả chúng.
Và bạn không phải sử dụng ngôn ngữ lập trình để quyết định nhóm nào viết tắt. Bạn có thể nhóm chúng theo bất kỳ sự tương đồng / chủ đề / danh mục có ý nghĩa mà bạn có trong tâm trí.
Vì vậy, khi bạn quên một từ viết tắt cụ thể, bạn có thể nhập các chữ cái đầu tiên của danh mục, nhấn C-x C-t
và chọn một chữ cái có liên quan trong menu.
Chỉnh sửa:
Để kết xuất tất cả các chữ viết tắt của bạn bên trong /home/user/mysynonyms.txt
, bạn có thể sử dụng 3 lệnh Ex này:
:let abbrev_list = []
:call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(abbrev_list, submatch(1))', 'gn')
:call writefile(abbrev_list, '/home/user/mysynonyms.txt')
Chỉnh sửa2:
Tôi đã thêm cờ n
khi substitute()
hàm được gọi vì bạn không cần bất kỳ thay thế nào. Mục đích duy nhất của nó là thêm chữ viết tắt trong danh sách mỗi khi tìm thấy.
Nhưng vì bạn có nhiều chữ viết tắt, nó có thể làm cho quá trình trở nên vô ích, tôi không biết. Ban đầu, tôi không đặt nó vì tôi không biết bạn đang sử dụng phiên bản Vim nào. Nếu phiên bản của bạn mới hơn 7.3.627 , nó sẽ ổn, nếu không bạn sẽ phải xóa n
cờ.