Tôi thấy rằng nếu bạn nhập tiền tố số trước khi thực hiện lệnh ex, quy ước mà nó áp dụng là thiết lập lệnh để chuẩn bị một thao tác trên phạm vi dòng. Nó được giải thích trong tài liệu,
MỘT SỐ DÒNG
Khi bạn biết có bao nhiêu dòng bạn muốn thay đổi, bạn có thể nhập số và sau đó ":". Ví dụ: khi bạn nhập "5:", bạn sẽ nhận được:
:.,.+4
Bây giờ bạn có thể gõ lệnh bạn muốn sử dụng. Nó sẽ sử dụng phạm vi "." (dòng hiện tại) cho đến khi ". + 4" (bốn dòng xuống). Do đó, nó kéo dài năm dòng.
Bây giờ những gì tôi đang xử lý là một chức năng tùy chỉnh của tôi, cái này:
function! MyAmazingEnhancedDot()
if v:hlsearch == 1
:normal! .n
else
:normal! .j
endif
endfun
Đây chỉ là một cách để hợp lý hóa các tác vụ lặp đi lặp lại bao gồm lặp lại một thao tác trên một loạt các dòng hoặc qua một loạt các kết quả tìm kiếm phù hợp.
Chức năng này được liên kết với một phím nóng. Chẳng hạn như Alt+ .hoặc bất cứ điều gì.
Mục tiêu của tôi là có thể làm một cái gì đó rất mạnh mẽ: Tôi sẽ có thể gõ /varName<CR>ciwnew-var<ESC>n9<Alt+.>
để đạt được đổi tên 10 trường hợp varName
thành new-var
.
Điều thực sự xảy ra nếu tôi làm điều này là nó không thực hiện việc đổi tên và 9 dòng được thao tác với thao tác .
chỉnh sửa đã được lưu của tôi từ cột 0.
Tôi chỉ có thể giả sử rằng Vim đang diễn giải tổ hợp phím của mình, do đó : :.,.+8 normal! .n
.
Về mặt nửa thủy tinh, :normal! .j
trường hợp của liên kết thực sự hoạt động, bởi vì j
chuyển động không có tác dụng là không có hậu quả trong tình huống này. (Tôi vẫn cần j
làm cho nó hoạt động trong trường hợp sử dụng tương tác không có tiền tố).
Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể ghi đè hành vi mở rộng dòng mà Vim áp dụng cho liên kết của tôi? Điều tuyệt vời là nếu tôi có thể đọc trong tiền tố số dưới dạng đối số hoặc đại loại như thế.
nnoremap <M-.> :<C-u>call MyAmazingEnhancedDot(v:count1)<cr>
và bỏ quacommand -count=1 EDot call MyAmazingEnhancedDot(<count>)
?