2009-10-13 33 views
19

Tôi đã từ lâu sử dụng phím tắt rất hữu ích này trong vim:Làm cách chèn một nhân vật duy nhất trong Vim một hoạt động nguyên tử

nmap <space> i <esc>r 

điều này có nghĩa rằng nếu tôi nhấn gianf, ví dụ, nó sẽ chèn một ký tự đơn f tại vị trí đã cho.

không may, tuy nhiên, đây không phải là nguyên tử, tức là, nếu tôi nhấn gianf và sau đó điều hướng ở một nơi khác, sau đó nhấn ., tôi nhận được tương đương với rf, không gianf.

tất cả điều này có ý nghĩa, nhưng đây là câu hỏi: có cách tạo nguyên tử này không, để . sẽ lặp lại thao tác 'chèn ký tự', và để hoàn tác, tất cả đều coi nó là một thao tác?

Trả lời

11

Tuyệt vời! Câu trả lời của Michael đã chỉ cho tôi plugin mà tôi cần để hoàn thành plugin của mình, giờ đây có thể làm những gì bạn muốn - tôi đã cố gắng tìm ra cách để làm điều này cho các lứa tuổi!

1) Install

2) Install my plugin

3) Thêm một bản đồ để .vimrc của bạn:

nnoremap <space> :<C-U>call InsertChar#insert(v:count1)<CR> 
+0

điều này phức tạp hơn nhiều so với mong đợi của tôi, nhưng làm cho con trỏ đỏ (đó là một liên lạc tuyệt vời), cho phép hủy bỏ với thoát, và có thể chỉ là những gì tôi sử dụng từ đây ... – Peter

+1

Tôi chỉ phát hiện ra điều này hôm nay, nhưng tôi vẫn bình luận muốn nói - điều này sẽ thay đổi cuộc sống! Cảm ơn bạn! – Umang

2

Rất tiếc, tôi không thể cung cấp câu trả lời cụ thể cho vấn đề của bạn nhưng tôi sẽ lưu ý rằng tôi có xu hướng sử dụng . khi tôi phải tạo lại khá nhiều lệnh (ví dụ: tôi muốn chèn f 5 lần hoặc nhiều hơn).

Nếu đó là trường hợp ở đây, tôi không nghĩ rằng việc tiết kiệm bằng cách sử dụng macro của bạn là giá trị nó. Giúp bạn tiết kiệm một phím tắt bằng cách sử dụng của bạn vĩ mô hơn là ifesc và hoạt động nguyên tử, do đó bạn có thể sau đó . vào nội dung trái tim của bạn.

Tôi sẽ chỉ sử dụng phiên bản không phải macro nếu tôi biết tôi muốn lặp lại nó rất nhiều.

P.S. Bạn biết tôi bắt đầu thích thẻ < kbd> khá một chút :-)

+1

hoàn toàn, và đây là hành vi hiện tại của tôi - nhưng sử dụng phím tắt này là rất thuận tiện tôi muốn làm cho nó có thể sử dụng tất cả thời gian. đó là ít hơn về tiết kiệm chìa khóa, và nhiều hơn nữa về tính nhất quán :) – Peter

+0

+1 cho postscript ngẫu nhiên (mà tôi giả định là không chế giễu tôi :)) – Peter

+0

Không, tôi đã thực sự không bao giờ sử dụng nó trước đây, tôi đã có xu hướng sử dụng đánh dấu blockquoting, nhưng kbd là tốt hơn cho các phím. – paxdiablo

3

Bạn có thể muốn xem tập lệnh plugin này. Có thể định cấu hình bản đồ của bạn để bản đồ có thể được hỗ trợ. Đọc tài liệu hỗ trợ

http://www.vim.org/scripts/script.php?script_id=2136

+0

cảm ơn rất nhiều vì điều này. có vẻ như cách tiếp cận của php rất nhiều là khá tốt và dựa trên điều này. – Peter

7

Điều này làm việc cho bạn?

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR> 
+0

Tốt và chắc chắn là một giải pháp khả thi. Một bất lợi của phương pháp này là con trỏ biến mất khi bạn nhấn dấu cách, vì vậy bạn mất dấu vết của nơi bạn đang chèn ký tự. @too nhiều cách tiếp cận của php là phức tạp hơn nhiều, nhưng không có lợi thế để rời khỏi con trỏ tại chỗ. – Peter

+2

Nếu bạn chèn nhanh, việc thiếu con trỏ sẽ không bị xóa. –

+2

Điều này thật tuyệt! Tôi đã sử dụng 'K' không bị ràng buộc, sử dụng ngón tay' i', và Kim bắt đầu với K. Tôi tin rằng đây là cách các nhà phát triển ban đầu ánh xạ các khóa. –

Các vấn đề liên quan