1
Bạn có thể đạt được những ánh xạ lệnh hoặc tốt hơn (màu hồng) rất nhanh. Tôi không đề xuất giải pháp này, nhưng là một ví dụ, nếu bạn muốn di chuyển con trỏ đến đầu dòng, <C-a>
bạn có thể thực hiện dòng sau sau khi nhấn :
từ chế độ bình thường (hoặc thêm dòng vào vimrc của bạn)
inoremap <C-a> <C-o>0
hoặc, nếu bắt đầu dòng có nghĩa là ký tự không trống đầu tiên của dòng
inoremap <C-a> <C-o>^
Điều tò mò, tôi chỉ thử nghiệm các ánh xạ này trong bộ đệm trong đó tôi đang viết câu trả lời này và tôi đã bối rối trong giây lát vì chúng không hoạt động. Sau đó, tôi nhận ra rằng tôi đã quên để vào chế độ chèn. Bạn dường như thấy khó khăn khi rời khỏi chế độ chèn để thực thi các lệnh chế độ bình thường. Bạn có thể thấy sau khi sử dụng Vim một thời gian, đó là phiên bản ngược mà bạn nán lại ở chế độ bình thường trong khi bạn đang suy nghĩ và chỉ thực hiện các chuyến du ngoạn để chèn chế độ cho những dịp đặc biệt. Vim có lẽ chỉ (hoặc chủ yếu) đáng để học nếu bạn thấy rằng bạn chỉnh sửa nhiều hơn là viết văn bản.
Vì vậy, một phần của câu trả lời cho câu hỏi của bạn về việc thực hiện nhanh chóng các lệnh chế độ bình thường từ chế độ chèn là <C-o>
, cho phép bạn tạm thời rời khỏi chế độ chèn để thực thi một lệnh chế độ bình thường, sau đó nhập lại. Đọc về nó tại :help i_Ctrl-o
. Điều này rất hữu ích cho các tiện ích một lần. Một tuyến đường bền vững hơn có lẽ là cố gắng nắm lấy chế độ bình thường làm mặc định cho điều hướng và chỉnh sửa và chỉ nhập chế độ chèn khi bạn thực sự muốn chèn các ký tự mới bằng tay vào bộ đệm.
2
Ví dụ của bạn rất chung chung nên thật khó để đưa ra câu trả lời cụ thể. Tôi sẽ tạo ra một ví dụ cụ thể với hy vọng nó phù hợp hoặc có thể dịch được thành thứ bạn gặp phải. Đối với số 1 của bạn, nó phụ thuộc vào cách bạn biết dấu ngoặc đơn đóng ở đâu. giả sử tôi có một dòng như
let cchar = s:cchar["atx"]
Điều này có nghĩa là một dòng của VimL, ngôn ngữ kịch bản của vim và nó (hoặc một cái gì đó giống như nó) xảy ra trong một tệp cú pháp Vim mà tôi hiện không đồng ý. Giả sử tôi muốn thay đổi phần bên phải của biểu thức này thành lệnh gọi hàm, có lẽ vì hàm cung cấp mặc định khi từ điển s:cchar
chưa được gán giá trị cho "atx"
khóa. Với con trỏ của tôi (ở chế độ bình thường) trên ký tự đầu tiên, 'l', tôi có thể nhập
f=wcf[MyFunction(<Esc>$r)
Nói ngắn gọn, điều này nói
f=
- chuyển tiếp tới '=' (tôi có thể nói fs
, nhưng có lẽ tôi sẽ không dừng lại đủ lâu để thấy rằng 'tôi' muốn tiếp cận là s đầu tiên trên dòng, vì vậy tôi đi tìm nhân vật đó là rõ ràng là duy nhất, và tiếp tục từ đó)
w
- từ tiếp theo, bây giờ con trỏ của tôi nằm trên 's' của 's: cchar'
cf[
- thay đổi để chuyển tiếp sang '['
tại thời điểm này, dòng này trông giống như
let cchar = |"atx"]
nơi |
là con trỏ, và tôi đang ở chế độ chèn. Tôi sau đó gõ MyFunction(
và để chế độ chèn ( <Esc>
).
$
- di chuyển con trỏ đến cuối dòng. Tôi có thể đã sử dụng E
cho từ cuối lớn hoặc f]
chuyển tiếp đến '' '' hoặc một số chuyển động khác, nhưng $
trước tiên xảy ra với tôi.
r)
- thay thế ký tự dưới con trỏ bằng dấu ')'
Bây giờ tôi đã thay đổi biểu thức gán từ gán từ từ điển script-local sang sử dụng giá trị trả về của hàm và khi làm như vậy tôi đã giới thiệu dấu ngoặc đơn. Tôi không biết nhu cầu đặc biệt của bạn đối với dấu ngoặc đơn trông như thế nào, có lẽ nó rất khác nhau, trong trường hợp đó sẽ có một chuỗi lệnh khác nhau để đạt được nó. Nếu tôi dừng lại để suy nghĩ lâu hơn về ví dụ đã tạo của mình, tôi có thể tìm ra những cách hiệu quả hơn để đạt được điều đó, nhưng ai có thời gian để dừng lại và suy nghĩ.
(Hãy thử, sao chép-dán (xin lỗi, yank-put) văn bản và lệnh vào bộ đệm và với con trỏ của bạn trên ký tự đầu tiên, 'f', của lệnh nhấn y$
. Bây giờ lệnh nằm trong thanh ghi không tên của bạn. Di chuyển đến đầu dòng đầu tiên và nhấn :normal <C-r>"
vào a) nhập chế độ dòng lệnh, b) bắt đầu thực hiện lệnh chế độ bình thường từ dòng lệnh và c) để dán ( atchoo đặt) thanh ghi không tên vào dòng lệnh như bình thường lệnh chế độ được thực thi. Điều duy nhất bạn cần thay đổi trong lệnh là thay thế <Esc>
chuỗi ký tự giả mạo (vì bạn đã sao chép atchoo từ trình duyệt của mình) bằng mã khóa Escape thực tế, vì vậy hãy xóa nó và nhấn <C-v>
và sau đó là phím Esc. Nó sẽ trông giống như^[
. Bây giờ nhấn return để chạy lệnh. Hoặc ... chỉ cần gõ chuỗi phím để kiểm tra các lệnh, tôi chỉ muốn cho bạn thấy rằng bạn có thể tương tác với chế độ bình thường từ chế độ cmdline <C-v>
, và <C-r>
, và tất cả các vinh quang khác của Wonderland. Ngoài ra, xem :help Cmdline-mode
.)
3
Để xóa một từ ngược, bạn có thể sử dụng ánh xạ chuẩn <C-w>
(xem :help i_Ctrl-w
). Tôi không biết nếu có một ánh xạ mặc định để xóa một từ chuyển tiếp, nhưng tôi cho rằng bạn có thể tạo một từ với
inoremap <C-S-w> <C-o>dw
Một lần nữa, <C-o>
sẽ đưa bạn ra khỏi chế độ chèn cho lệnh một lần và dw
sẽ "xóa" qua chuyển động "từ". Xem :help d
, :help w
. Nếu các từ chuyển tiếp bạn xóa không phải là các từ thực tế mà là các tên class.feft #, bạn có thể muốn sử dụng W
(xem :help W
). Nếu bạn đã chủ yếu ở chế độ bình thường bạn không cần những ánh xạ, chỉ cần làm dw
, db
hoặc bạn bè.
Một số chương giúp đỡ để xem xét kỹ hơn
:help <C-o>
:help Insert
:help f
và các phần sau ( F
, t
, T
, ;
và ,
)
:help word-motions