2011-07-04 20 views
9

Tôi thường sử dụng khối hình ảnh sau đó chèn vào nhiều dòng khi ví dụ nhận xét ra rất nhiều mã. Điều này là rất tốt cho việc chèn văn bản vào cùng một vị trí trên nhiều dòng nhưng tôi không thể tìm ra cách xóa văn bản này sau bằng cách sử dụng chế độ chặn trực quan, Backspace, Del và d tất cả đều không hoạt động. Tôi đang sử dụng MacVim.Vim - Visual Block: Xóa thay vì chèn

Trả lời

18

Bạn đang tìm kiếm x:

root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 

Sau đó, hình ảnh-block-select, x:

root:/root:/bin/bash 
daeaemon:/usr/sbin:/bin/sh 
bin/bin:/bin/sh 
sys/dev:/bin/sh 

tôi sử dụng này thường xuyên, cho chính xác lý do tương tự - cho ý kiến ​​và uncommenting khối lớn của mã.

+0

nhờ thats vĩ đại, là có một cách để giữ nó trong khối thị giác chế độ và làm nhiều x? –

+0

@beck: Bạn không thể ở chế độ trực quan, theo như tôi biết. Tuy nhiên, bạn có thể đặt trước 'x' bằng một số; ví dụ. '3x' xóa ba ký tự, có thể là những gì bạn đang theo dõi. –

+7

@beck: Bạn cũng có thể sử dụng lệnh 'gv' để cân nhắc lại cùng một khối. –

5

Đây không phải là trả lời trực tiếp câu hỏi (sarnold đã làm như vậy), nhưng tôi sẽ đề nghị có nhiều cách hiệu quả hơn (un-) các khối mã bình luận. Tôi có một chức năng CommentToggle mà có thể bình luận hoặc bỏ ghi chú dòng hiện tại, tùy thuộc vào việc nó có bắt đầu bằng "comchar" hay không.

function! CommentToggle(comchar) 
    let firstchar = matchstr(getline("."),"[^ ]") 
    if firstchar == a:comchar 
     sil exe 'normal ^xx' 
    else 
     sil exe 'normal ^i' . a:comchar . ' ' 
    endif 
endfunction 

Vì vậy, đối với các file perl bạn có thể lập bản đồ:

nnoremap <silent> <leader>c :call CommentToggle('#')<CR> 

và nhấn \c (un-) bình luận của ba dòng từ vị trí con trỏ.

Bạn cũng có thể viết một bản đồ hình ảnh chế độ:

vnoremap <silent> <leader>c :call CommentToggle('#')<CR> 

cho phép bạn chọn một vùng hình ảnh và nhấn \c đến (un-) bình luận tất cả.

Chức năng cụ thể này chỉ hoạt động đối với nhận xét một ký tự ("#", "%", v.v.), nhưng đơn giản là mở rộng chuỗi thành chuỗi dài hơn (ví dụ: "//") và thậm chí nhiều thay thế phức tạp hơn , chẳng hạn như nhận xét HTML.

Hy vọng điều này sẽ hữu ích.

+0

mẹo hay, cảm ơn bạn. –

+1

Tôi đồng ý cho "phương pháp tốt hơn" Tuy nhiên, thậm chí còn có phương pháp tốt hơn: bổ trợ dành riêng cho nhận xét * toggling * -> Tăng cường nhận xét, NERDCommenter, tComment (Tôi không chắc chắn về điều cuối cùng; trong một thập kỷ nay) –

1

Câu trả lời của Prince Goulash không hoạt động trong các dòng có tab hàng đầu.

Tôi đã thay đổi nó, thêm ký tự tab vào mẫu, mặc dù các dòng bị mất thụt lề sau khi nhận xét và bỏ ghi chú.

function! CommentToggle(comchar) 
     let firstchar = matchstr(getline("."), "[^ \t]") 
     if firstchar == a:comchar 
       sil exe 'normal ^2x' 
     else 
       sil exe 'normal ^i' . a:comchar . ' ' 
     endif 
endfunction 

Tôi thích nhiều thêm những nhận xét char đến vị trí đầu tiên trong đường dây, sửa đổi này đến chức năng Hoàng tử món garu Hungary của hiện các trick:

function! CommentToggle(comchar) 
     let firstchar = matchstr(getline("."), "[^ \t]") 
     if firstchar == a:comchar 
       sil exe 'normal ^2x' 
     else 
       sil exe 'normal gI' . a:comchar . ' ' 
     endif 
endfunction 
+1

Hãy cẩn thận với việc trả lời câu trả lời với các câu trả lời khác - khi một người nào đó nhận thấy, chúng thường biến mất sau vài phút :) - nhưng đây là câu trả lời hay khi nó ít được hướng đến Prince Goulash và hơn thế nữa hướng vào việc giải quyết vấn đề của beck. :) – sarnold