Câu trả lời:
Đây là một đối tượng văn bản "dòng" thô:
xnoremap il g_o0
onoremap il :normal vil<CR>
xnoremap al $o0
onoremap al :normal val<CR>
Và một đối tượng văn bản "đệm" thô:
xnoremap i% GoggV
onoremap i% :normal vi%<CR>
---BIÊN TẬP---
Một "điều hành" là một lệnh mà không làm bất cứ điều gì bởi chính nó: d
, y
vv
Nhấn các phím đó sẽ đưa bạn vào "chế độ chờ xử lý của nhà điều hành", trong đó Vim chờ bạn nói cho bạn biết bạn muốn nó hoạt động như thế nào với một "chuyển động chờ toán tử".
Bạn có thể sử dụng :omap
hoặc :onoremap
để xác định các chuyển động chờ toán tử tùy chỉnh. Kỹ thuật được sử dụng ở đây được lấy cảm hứng từ :help omap-info
:
Lưu ý rằng tôi đã sử dụng :onoremap
bởi vì il
, al
và i%
không tồn tại. Nếu bạn đang ghi đè một chuyển động hoặc đối tượng văn bản hiện có - giả sử ip
- bạn phải sử dụng ánh xạ đệ quy : :omap
.
:help :map-operator
mô tả một phương pháp tiên tiến hơn một chút.
Xem :help v_o
cho o
trong chế độ trực quan.
o
(hành chế độ cấp phát) trong onoremap? Những gì o
trong chế độ trực quan làm gì? Tôi đoán rằng đó là "mặt khác", bởi vì nó dường như nhảy sang phía bên kia của một lựa chọn ... Làm thế nào để tôi tìm thấy :h
nó? Tôi không thể tìm thấy nó với :h x_o
hoặc :h o
.
Tôi sẽ đề xuất một giải pháp bổ sung, để sử dụng ^ thay vì 0 (vì vậy dòng bắt đầu ở đầu ký tự đầu tiên:
xnoremap il g_o^
onoremap il :normal vil<CR>
xnoremap al $o^
onoremap al :normal val<CR>
Bằng cách này, nếu chúng ta "thay đổi dòng", nó sẽ tôn trọng mức độ thụt đầu dòng.