it-swarm-vi.tech

Tại sao \ r là một dòng mới cho Vim?

Từ câu hỏi Cách thay thế một ký tự cho dòng mới trong Vim?. Bạn phải sử dụng\r khi thay thế văn bản cho một dòng mới, như thế này

:%s/%/\r/g

Nhưng khi thay thế cuối dòng và dòng mới cho một ký tự, bạn có thể làm như sau:

:%s/\n/%/g 

Phần nào trong tài liệu hướng dẫn sử dụng những hành vi này, và lý do đằng sau chúng là gì?

243
Vinko Vrsalovic

Từ vim docs trên mẫ :

\r khớp với <CR>

\n khớp với một dòng cuối - Khi khớp trong một chuỗi thay vì văn bản đệm, một ký tự dòng mới theo nghĩa đen được khớp.

154
pjz

Từ http://vim.wikia.com/wiki/Search_and_Vplace :

Khi tìm kiếm

...

\n là dòng mới, \rCR (vận chuyển trở lại = Ctrl-M = ^M)

Khi thay thế

...

\r là dòng mới, \n là một byte rỗng (0x00).

190
Limited Atonement

Một khía cạnh khác của vấn đề này là _\0_, theo truyền thống là NULL, được lấy trong _s//\0/_ có nghĩa là "toàn bộ mẫu phù hợp". (Nhân tiện, cái này là dư thừa với, và dài hơn, _&_).

  • Vì vậy, bạn không thể sử dụng _\0_ có nghĩa là NULL, vì vậy bạn sử dụng _\n_
  • Vì vậy, bạn không thể sử dụng _\n_ có nghĩa là _\n_, vì vậy bạn sử dụng _\r_.
  • Vì vậy, bạn không thể sử dụng _\r_ có nghĩa là _\r_, nhưng tôi không biết ai sẽ muốn thêm char đó vào mục đích.

Mùi

105
rking

:help NL-used-for-Nul

Chi tiết kỹ thuật:

_<Nul>_ ký tự trong tệp được lưu dưới dạng _<NL>_ trong bộ nhớ. Trong màn hình, chúng được hiển thị là "_^@_". Bản dịch được thực hiện khi đọc và ghi tập tin. Để khớp _<Nul>_ với mẫu tìm kiếm, bạn chỉ cần nhập CTRL - @ hoặc " CTRL-V 000". Đây có lẽ chỉ là những gì bạn mong đợi. Bên trong nhân vật được thay thế bằng _<NL>_ trong mẫu tìm kiếm. Điều khác thường là gõ CTRL-VCTRL-J cũng chèn một _<NL>_, do đó cũng tìm kiếm một _<Nul>_ trong tệp. {Vi không thể xử lý _<Nul>_ ký tự trong tệp}


47
Aristotle Pagaltzis

Trước hết, mở :h :s để xem phần "4.2 Thay thế" tài liệu về "Thay đổi". Đây là những gì lệnh chấp nhận:

_:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
_

Lưu ý mô tả về patternstring

Đối với _{pattern}_ xem |pattern| .
[.__.] _{string}_ có thể là một chuỗi ký tự hoặc một cái gì đó
đặc biệt; xem |sub-replace-special| .

Vì vậy, bây giờ bạn biết rằng mẫu tìm kiếm và mẫu thay thế tuân theo các quy tắc khác nhau. Nếu bạn theo liên kết đến _|pattern|_, nó sẽ đưa bạn đến phần giải thích toàn bộ các mẫu biểu thức chính quy được sử dụng trong Vim.

Trong khi đó, _|sub-replace-special|_ đưa bạn đến phần phụ của "4.2 Thay thế", trong đó có các mẫu để thay thế, trong đó có _\r_ cho ngắt/tách dòng.

(Phím tắt đến phần này của hướng dẫn sử dụng là :h :s% )

10
syockit