Làm thế nào để ngăn chặn ngắt dòng trong vim


257

Tôi thích rằng các dòng dài được hiển thị trên nhiều dòng thiết bị đầu cuối; Tôi không thích rằng vim chèn dòng mới vào văn bản thực tế của tôi. Tôi nên thay đổi phần nào của .vimrc?


7
Để rõ ràng: bạn thích rằng các dòng dài được hiển thị trên nhiều dòng thiết bị đầu cuối; bạn không thích điều đó vim chèn dòng mới vào văn bản thực tế của bạn? Nếu vậy, thì :set nowrapngược lại với những gì bạn muốn :(.
Andrew Aylett

@Andrew: vâng, tóm tắt của bạn là chính xác những gì tôi muốn
Haiyuan Zhang

Câu trả lời:


304

Sử dụng

:set wrap

Để bọc các dòng một cách trực quan, tức là dòng vẫn là một dòng văn bản, nhưng Vim hiển thị nó trên nhiều dòng.

Sử dụng

:set nowrap

Để hiển thị các dòng dài chỉ là một dòng (tức là bạn phải cuộn theo chiều ngang để xem toàn bộ dòng).


3
Cảm ơn những lời khuyên của các bạn. Tôi đã đi với: set nowrap và: set textcreen = 0 hoạt động tuyệt vời
Robert Beltran

5
Khi tôi nhập, tôi vẫn muốn xem giới hạn cột 80 "trực quan" và tôi không muốn vim tự động thêm nguồn cấp dữ liệu khi tôi nhập sau cột thứ 80. Tôi phải làm thế nào?
Olivier Pons

7
Đây chính xác là câu trả lời tôi đang tìm kiếm, nhưng nó không phải là câu trả lời cho câu hỏi của OP. Đó là một chút sai lầm khi có điều này là câu trả lời hàng đầu. Tôi không biết làm thế nào để khắc phục tình trạng này. Tôi chỉ cần chỉnh sửa câu trả lời của bạn để trả lời câu hỏi ban đầu. Nhưng đã có một câu trả lời thích hợp gần như được đánh giá cao. Vì vậy, tôi chỉ bỏ phiếu để chuyển đổi hai câu trả lời.
Daniel Darabos

3
Đây chính xác là câu trả lời tôi không tìm kiếm và nó không phải là câu trả lời cho câu hỏi của OP.
peeol

Đây không phải là một câu trả lời cho câu hỏi.

194

Tôi thích rằng các dòng dài được hiển thị trên nhiều dòng thiết bị đầu cuối

Kiểu gói trực quan / ảo này được bật với wraptùy chọn cửa sổ:

set wrap

Tôi không thích rằng vim chèn dòng mới vào văn bản thực tế của tôi.

Để tắt gói dòng vật lý, hãy xóa cả hai tùy chọn textwidthwrapmarginbộ đệm:

set textwidth=0 wrapmargin=0

1
Cảm ơn! set textwidth=0 wrapmargin=0hoạt động nhưng nếu tôi đặt nó vào .vimrc, nó không có tác dụng gì đối với các tệp văn bản thuần túy. Làm thế nào để tôi tìm ra và loại bỏ ghi đè?
qubodup

7
@qubodup Bạn có thể kiểm tra xem có thứ gì đó ghi đè cài đặt .vimrc của bạn hay không bằng cách mở tệp nơi bạn thấy sự cố và nhập :verbose set textwidth? wrapmargin?. Điều này sẽ cho bạn biết các giá trị hiện tại của chúng và cũng là nơi chúng được đặt. Có thể bạn có một plugin ghi đè chúng. Trong trường hợp đó, bạn có thể gỡ cài đặt plugin đó hoặc thử ghi đè cài đặt plugin sau trong runtimepath của bạn (ví dụ ~/.vim/after:) hoặc bằng chế độ tự động của riêng bạn. Cách tiếp cận đúng sẽ phụ thuộc vào nơi / cách nó được thiết lập lại.
Laurence Gonsalves

set wrapset linebreaklà những gì đã làm cho tôi.
Ilia Choly

36

Tôi không chắc là tôi hiểu hoàn toàn, nhưng bạn có thể đang tìm kiếm cài đặt cấu hình 'định dạng'. Hãy thử một cái gì đó như :set formatoptions-=t. Các ttùy chọn sẽ chèn ngắt dòng để làm cho bọc văn bản ở bộ chiều rộng bằng textwidth. Bạn cũng có thể đặt lệnh này trong của bạn .vimrc, chỉ cần loại bỏ dấu hai chấm ( :).


3
Đây dường như là lựa chọn tốt nhất để giải quyết mong muốn của OP. Tôi thích thực tế là vim vẫn hiển thị một đường thẳng đứng tại tw.
mitchus

3
Đây là câu trả lời duy nhất thực sự giải quyết câu hỏi của OP. Hầu hết những người khác làm ngược lại. OP vẫn muốn các dòng dài được hiển thị bao quanh, nhưng để vim không tự động chèn ngắt dòng.
sebastian

33

Sử dụng :set nowrap.. hoạt động như một nét duyên dáng!


10
Ngoại trừ việc nó trái ngược với những gì OP định nghĩa là hành vi mong muốn ...: P
Morlock

5
@Morlock, nhưng trả lời câu hỏi tôi có và google dẫn tôi đến đây :)
Ben Usman

Có phím tắt nào cho việc này không?
Pini Cheyni

@PiniCheyni, thêm vào tệp .vimrc của bạn: nnoremap <Cw>: đặt invwrap <CR> Sau đó, bạn có thể sử dụng Ctrl + W để chuyển đổi gói văn bản.
reas0n

30

:set tw=0

VIM sẽ không tự động chèn ngắt dòng, nhưng sẽ tiếp tục ngắt dòng.


3
Tôi muốn hoàn toàn ngược lại ... khi tôi gõ tôi vẫn muốn xem giới hạn cột 80 "trực quan" và tôi không muốn vim tự động thêm nguồn cấp dữ liệu khi tôi nhập sau colomn thứ 80. Tôi phải làm thế nào?
Olivier Pons

16

Bạn có thể thấy set lbrhữu ích; với set wrapđiều này sẽ bao bọc nhưng chỉ cắt dòng trên khoảng trắng và không ở giữa một từ.

ví dụ

without lbr the li
ne can be split on
a word

with lbr on the
line will be
split on 
whitespace only

Nó được highlly khuyến khích để tránh tùy chọn abbreviating vì trong tương lai bạn sẽ phải thực hiện một tìm kiếm trên hệ thống trợ giúp để hiểu những gì bạn đã giải quyết, vì vậy sử dụng set nolinebreakthay vìset lbr
SergioAraujo

12

set formatoptions-=t Giữ băng thông trực quan nhưng không thêm dòng mới trong chế độ chèn.


4

Thật kỳ lạ khi một thiết lập đơn giản như vậy sẽ đòi hỏi lượng 'h Focus-p Focus' này để hoạt động.

Để trả lời câu hỏi của bạn bây giờ, đối với tôi nó dường như hoạt động với sự kết hợp của các điều sau đây:

:set wrap linebreak nolist

(điều này dường như để ngăn chặn các dòng hiện có bị phá vỡ, chỉ cần bọc.)

set formatoptions=l

(điều này ngăn các dòng mới / chỉnh sửa bị phá vỡ, trong khi + = không làm điều đó cho tôi vì các cài đặt / plugin khác dường như tìm thấy không gian và thêm các tùy chọn riêng của chúng ghi đè lên tôi.)


4

Nếu, giống như tôi, bạn đang chạy gVim trên Windows thì tệp .vimrc của bạn có thể tìm nguồn cung cấp tệp Vimscript 'ví dụ' khác tự động đặt textwidth(trong trường hợp của tôi là 78) cho các tệp văn bản.

Câu trả lời của tôi cho một câu hỏi tương tự như câu hỏi này - Cách dừng văn bản gói gVim ở cột 80 - trên trang web Vi và Vim Stack Exchange :

Trong trường hợp của tôi, bình luận của Vitor đề nghị tôi chạy như sau:

:verbose set tw?

Làm như vậy đã cho tôi đầu ra sau:

textwidth=78
      Last set from C:\Program Files (x86)\Vim\vim74\vimrc_example.vim

Trong vimrc_example.vim , tôi đã tìm thấy các dòng có liên quan:

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  ...

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  ...

Và tôi thấy rằng .vimrc của tôi đang tìm nguồn cung cấp tệp đó:

source $VIMRUNTIME/vimrc_example.vim

Trong trường hợp của tôi, tôi không muốn textwidthđược đặt cho bất kỳ tệp nào, vì vậy tôi chỉ nhận xét dòng có liên quan trong vimrc_example.vim .


1
Thay vì chỉnh sửa tệp vimrc_example.vim, tôi chỉ thêm vào autocmd FileType text setlocal textwidth=0tệp vimrc và điều đó đã khắc phục sự cố khi các giải pháp đề xuất khác không có.
GrandAdmirus

3

Đúng là đặt ngay bây giờ sẽ cho phép bạn dán thành một dòng dài mà không cần vi / vim thêm dòng mới, nhưng sau đó dòng không được bọc trực quan để dễ đọc. Nó chỉ là một dòng dài mà bạn phải cuộn qua.

Để có dòng bao bọc trực quan nhưng không có ký tự dòng mới được chèn vào nó, hãy đặt bọc (có thể là mặc định để không cần thiết) và đặt text thong = 0 .

Trên một số hệ thống, cài đặt text thong = 0 là mặc định. Nếu bạn không thấy đó là trường hợp, hãy thêm set text thong = 0 vào tệp .exrc để nó trở thành mặc định của người dùng cho tất cả các phiên vi / vim.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.