2012-03-22 21 views
5

Trong hướng dẫn trực tuyến của Vim, :help DiffOrig sẽ hiển thị trình tự lệnh được đề xuất để nhận các thay đổi của tệp chỉnh sửa hiện tại.Tại sao sử dụng 0d_ trong DiffOrig trong Vim?

Ở đây là:

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis 
        \ | wincmd p | diffthis 

Tôi tự hỏi những gì ảnh hưởng của 0d_ là. Tôi đã thử 0d_ ở chế độ bình thường, nó hoạt động như dd, nhưng tôi không thể hiểu tại sao nó được sử dụng ở đây.

+4

Sự sụp đổ của bạn ở đây là nghĩ rằng '0d_' là lệnh chế độ thông thường khi nó thực sự là một lệnh cũ. Bất cứ điều gì trong một đường ống như vậy sẽ luôn luôn là một lệnh cũ. Những gì thực sự được chạy ở đây là giống như ': 0delete _' nếu điều đó làm cho nó rõ ràng. –

+1

Bổ sung @RandyMorris bình luận: nếu bạn cần chơi chế độ gõ phím bình thường trong chế độ cũ, bạn có thể sử dụng ': norm' (và liên hợp với': exec' để liên kết nó): điều này tương đương với '... | exec 'norm gg "_dd' | diffthis | ...'. – Benoit

+0

@Randy Morris, Cảm ơn tôi đã sai khi nghĩ rằng đó là một lệnh chế độ bình thường thực sự. – longbowk

Trả lời

8

Hãy giải thích nó một chút: Giả sử bạn có foo.txt gốc chứa (với số dòng):

1 a 
2 c 
3 d 
~ 

Bạn đã thêm một dòng có chứa “b” giữa các dòng 1 và 2:

  • :vert new tạo ra một mới, trống, bộ đệm trong một sự chia rẽ dọc (:help :new)
  • :set bt=nofile làm cho nó một bộ đệm đầu (:help 'bt'). Lưu ý:

    1 a | 1 ·<cursor here 
    2 b | ~ 
    3 c | ~ 
    4 d | ~ 
    ~ | ~ 
    
  • :r # chèn sau dòng hiện tại, nội dung của file thay thế (#), như được lưu trữ trên hệ thống tập tin. Bạn chưa lưu bộ đệm khác, vì vậy bạn sẽ nhận được nội dung gốc. (:help alternate-file).
    :help :r cho bạn biết rằng nó luôn chèn sau. Do đó:

    1 a | 1 
    2 b | 2 a 
    3 c | 3 c 
    4 d | 4 d 
    ~ | ~ 
    
  • :0d_ xóa dòng đầu tiên. Lý do tại sao 0, tôi không biết nó thực sự, tôi thà viết nó :1d_. :help range nói:

    Khi sử dụng một 0 (zero) này được xem như là một 1 bởi hầu hết các lệnh

    Các _ xác định rằng nó đi vào đăng ký lỗ đen. Xem :help :d về lệnh :d cũ, nó hoạt động theo chiều dọc.

Phần còn lại là hiển nhiên.

+1

TL; DR ": 0d_ loại bỏ dòng đầu tiên" - phần còn lại hiển nhiên :) +1 – sehe

+0

@sehe: TL; DR ': 0d_' xóa dòng đầu tiên vì': r' chèn nội dung tệp gốc bên dưới một dòng trống. – Benoit

+0

Cảm ơn bạn rất nhiều. Nó xóa dòng đầu tiên thành màu đen -hộp đăng ký. – longbowk

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