2012-01-05 41 views
6

tôi thường có đoạn mã như thế này:Làm thế nào để xóa một cách hiệu quả văn bản, ruột kết và một dấu phẩy trong VIM

it "should do something", :focus do 
    ... 
end 

Khi tôi muốn xóa , :focus Tôi thường làm

  1. Đến dòng 1: 1G
  2. đến đại tràng: f:
  3. Xóa dấu hai chấm (sử dụng xung quanh văn bản, vì vậy tôi có thể lặp lại nó): daw
  4. Xóa focus (chỉ cần lặp lại trước đó): ..
  5. Xóa dấu phẩy (di chuyển sang trái và thay thế bằng dấu cách): hr<SPACE>.

Có cách nào có thể đạt được các bước 3-5 hiệu quả hơn không?

+2

Không trực tiếp câu hỏi của bạn, nhưng lối tắt cho bước 1: 'gg', nghĩa là.nhấn phím tương tự hai lần thay vì nhấn hai phím khác nhau ... – Nigu

+0

Vâng, chắc chắn. Cảm ơn vì điều đó. Tôi đã sử dụng f để làm nổi bật rằng mã sẽ không nằm trên hàng đầu tiên. Nó chỉ ở đây, trong câu hỏi :) –

Trả lời

8

Bạn có thể truy cập:

  1. 1G để chuyển đến dòng đầu tiên
  2. f, để chuyển đến dấu phẩy
  3. dE để xóa cho đến đầu tiếp theo của WORD (WORD in capital letters là bất kỳ chuỗi ký tự nào không phải là dấu cách).
+0

'dE'works đáng kinh ngạc ở đây. Thậm chí tốt hơn sau đó @rejj đề xuất. Nhưng tôi không thực sự hiểu tại sao chính xác 'E' nhảy qua dấu phẩy, dấu hai chấm và một từ. Sẽ đánh giá cao nếu bạn có thể giải thích điều đó. Ngoài ra những gì là đối diện với 'E' (di chuyển theo hướng ngược lại)? –

+1

'E' và' B' chuyển đến kết thúc (tiến lên) và bắt đầu (lùi) của WORD. 'gE' và' W' chuyển đến cuối WORD trước đó và bắt đầu từ WORD tiếp theo. ': help E',': help B', ': help gE',': help W' sẽ cho bạn biết! Lưu ý rằng có chính xác các lệnh giống nhau không có chữ cái viết hoa ('w',' b', 'ge' và' e') mà định nghĩa của từ là khác nhau (ký tự dấu chấm câu không phải là một phần của từ: ' : help word' và ': help WORD'). – Benoit

3

Với con trỏ của bạn trên , bạn có thể làm v, e, e, d.

hoặc d, , e

+0

Ohh, đơn giản thế :) !! Đối với một số lý do tôi hiếm khi nghĩ về dấu phẩy và dấu hai chấm là từ :) Cảm ơn rất nhiều! –

0

bạn muốn chương trình tốt hơn nơi con trỏ của bạn, nhưng giả định đó là sau khi "kết thúc", tôi muốn làm điều này:

?",<CR>ldt<space>. 
+0

Tôi đã hiển thị vị trí con trỏ. Nó nằm trên đại tràng. Xem bước 2 trong câu hỏi. Tìm kiếm là một chuyển động rất không chắc chắn và phá vỡ dòng chảy của tôi. 'Ldt ' đang làm gì? –

+0

Tôi thấy những gì 'ldt ' là. Không bắt nó lúc đầu. Với 'ldt ', bạn vẫn cần phải lùi lại và xóa dấu phẩy. Nó tương tự như những gì tôi đã làm trong câu hỏi. –

1

Với con trỏ hoặc ruột kết bạn có thể làm dF,dE. dF, một phần sẽ xóa lùi lại và bao gồm dấu phẩy. Sau đó, dE sẽ xóa tối đa ký tự khoảng trắng tiếp theo. Điều tốt đẹp về điều này là nếu không có dấu phẩy trước thì điều này vẫn sẽ làm tương tự. Vì vậy, với mã

if :focus, "should do something" do 

Nếu con trỏ là trên đại tràng macro này sẽ xóa chỉ là một phần :focus,, mặc dù nó sẽ để lại hai khoảng trống phía sau.

+0

Rất tuyệt! Tương tự như đề xuất của @Benoit. –

+0

Tôi nên làm mới thường xuyên hơn: P –

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