Tôi có thể biện minh cho văn bản trong Vim không?


38

Lý do duy nhất khiến tôi chỉnh sửa tệp văn bản bằng Pico hoặc Nano và không phải trong Vim là lệnh "Justify" của nó ^J. Nó sẽ định dạng lại một đoạn văn bản, tạo các ngắt dòng khi ngắt từ để văn bản nổi trên màn hình có chiều rộng cố định - định dạng văn bản để vừa với 80 cột được xác định trước, chỉ tạo ngắt dòng giữa các từ. Do hạn chế chức năng, nó rất hữu ích, cho dù định dạng các khối nhận xét dài, tệp tài liệu hay chỉ thay thế một dòng tham số vô tận bằng thứ gì đó dễ đọc hơn.

Tôi có thể làm điều gì đó như thế trong Vim không?

Câu trả lời:


37

Bạn có thể sử dụng gqhoặc gwtoán tử kết hợp với lệnh chuyển động. Theo mặc định, nó sử dụng fmtchương trình (trong Linux) để định dạng văn bản đã cho. Tuy nhiên, theo sự hiểu biết tốt nhất của tôi, nó không biện minh cho các dòng vì vậy bạn sẽ nhận được lề phải.

Cách tôi sử dụng là gwip(chế độ bình thường) với con trỏ trên đoạn văn. Điều này sẽ định dạng đoạn hiện tại giữ con trỏ trên cùng một vị trí. Tôi sử dụng nó theo cách này để đảm bảo rằng chỉ có đoạn hiện tại được định dạng. Khi chỉnh sửa tệp văn bản, phát hành gwG(chế độ bình thường) khi bắt đầu tệp sẽ định dạng toàn bộ văn bản. Là một thực hành tốt, hãy chắc chắn để lại ít nhất một dòng trống giữa các đoạn.

Có rất nhiều cấu hình có thể được thực hiện. Để bắt đầu, đây là một số sự giúp đỡ liên quan: :h gq, :h gw, :h fo(định dạng tùy chọn), :h fp(chương trình định dạng), :h fo-table(giải thích về các tùy chọn có thể).


1
gq / gw chắc chắn là con đường để đi. để thêm vào thông báo này, bạn có thể thay đổi định dạng chương trình thành mệnh để có nhiều tùy chọn hơn. Thanh toán vimcasts.org/episodes/formatted-text-with-par
Bambu

3
Theo mặc định, Vim không sử dụng bất kỳ chương trình bên ngoài nào, mặc dù bạn có thể chọn sử dụng một chương trình bằng cách đặt 'formatprg'tùy chọn.
jamessan 6/2/2015

15

Có một VimCast tuyệt vời về chủ đề này.

http://vimcasts.org/episodes/formatted-text-with-par/

Về cơ bản, bạn cần cài đặt par:

$ brew install par
# or
$ sudo apt-get install par

Và sau đó, vì bạn muốn các cột được bọc trong 80 cột:

:set formatprg=par\ -w80

Bây giờ bạn có thể sử dụng gqtoán tử, như trong các câu trả lời khác (ví dụ gqip) và nó sẽ sử dụng Par thay vì định dạng tích hợp sẵn của Vim.

Par khá tiên tiến, và nó sẽ định dạng các bình luận như thế này độc đáo:

/* This is a long */
/* multiline comment */

11

Từ :help usr_25:

JUSTIFYING TEXT                                                                 

Vim has no built-in way of justifying text.  However, there is a neat macro     
package that does the job.  To use this package, execute the following          
command:                                                                        

        :runtime macros/justify.vim                                             

This Vim script file defines a new visual command "_j".  To justify a block of  
text, highlight the text in Visual mode and then execute "_j".

Vì vậy, tất cả những gì bạn phải làm là chạy

:ru macros/justify.vim

và sau đó gõ

_j

để biện minh cho văn bản trong toàn bộ tập tin.

(Tất nhiên, bạn cũng có thể thêm ru macros/justify.vimvào .vimrc của mình để bạn không phải nhập nó mỗi lần.)

Lưu ý : điều này không thêm ngắt dòng cho bạn. Bạn phải thêm chúng bằng tay gq. Đối với điều này, bạn cũng phải đặt textwidth(mặc định là 0) thành giá trị mong muốn của bạn thông qua

set textwidth=80

và nếu bạn muốn gói văn bản tự động bằng cách cài đặt t-flag qua

set formatoptions+=t

Nếu bạn muốn, bạn có thể đặt ánh xạ trong .vimrc để thực hiện toàn bộ việc này cho bạn:

nnoremap <C-j> gggqG_j

Thao tác này sẽ di chuyển đến phần đầu của tệp ( gg), bao bọc tất cả các dòng ( gqcho đến khi G) và sau đó _jduy trì văn bản.



Tôi chỉ tìm thấy :set fo+=atùy chọn rất hữu ích để tự động định dạng lại toàn bộ đoạn văn. Có một cái nhìn :help fo-tablecho các lựa chọn khác. Ngoài ra còn có một video hướng dẫn tốt đẹp ở đây .
Suuuehgi

+1 cho giải pháp tích hợp hoàn toàn. Ánh _jxạ được thêm bởi macro dường như biện minh cho toàn bộ tệp cho tôi hoặc nó có thể bị giới hạn với lựa chọn trực quan theo đường thẳng.
ches

5

Mặc dù trợ giúp của nano gọi ^Jlệnh "Justify" nhưng thực tế nó không chứng minh được văn bản, nó định dạng lại văn bản phá vỡ các dòng trước lề phải của màn hình (hoặc tại một số cột có thể định cấu hình, tôi đoán vậy).

Bạn có thể làm điều tương tự trong VIM bằng cách thiết lập các biến textwidth, từ :help 'textwidth':

Chiều rộng tối đa của văn bản đang được chèn. Một dòng dài hơn sẽ bị phá vỡ sau khoảng trắng để có chiều rộng này. Giá trị 0 sẽ vô hiệu hóa điều này.

Điều đó có nghĩa là: trong khi bạn đang gõ, nếu một dòng dài hơn textwidthký tự, VIM sẽ ngắt dòng ở khoảng trống đầu tiên để giữ cho độ dài của dòng nhỏ hơn hoặc bằng textwidth.

Để làm việc này, tùy chọn formatoptionsphải chứa chữ cái t. Xem :help 'formatoptions':help fo-tablecho các tùy chọn có sẵn, ví dụ bạn có thể quan tâm đến ctùy chọn để làm cho định dạng hoạt động với các bình luận.

Chỉnh sửa : bạn có thể thực hiện thao tác tương tự mà không cần đặt tvào formatoptions, sử dụng lệnh gw{motion}, nó định dạng văn bản giữa vị trí con trỏ hiện tại và vị trí của con trỏ sau {motion}. Các gwlệnh cũng có sẵn trong chế độ hình ảnh, nó định dạng văn bản đã chọn.


1
Điều đó tốt cho việc gõ. Tôi có thể áp dụng điều đó cho văn bản có sẵn không?
SF.

3

Đây là hai lựa chọn dễ dàng:

  1. với một khối văn bản được chọn, gõ !fmt
  2. với con trỏ của bạn khi bắt đầu một khối, gõ !}fmt

Cả hai đều gửi một khối văn bản để unix fmt, xem man fmtcho các tùy chọn. Bạn có thể truyền đối số tùy chọn từ vim. Ví dụ: để định dạng một khối rộng 50 ký tự, hãy nhập !}fmt -w 50.


xin lỗi về điều đó, đã sửa ngay bây giờ
kaan 6/12/2015

Bạn cũng có thể định dạng toàn bộ tệp của mình bằng cách nhập :%!fmtvà hoàn tác bằng một tệp unếu bạn không thích kết quả.
tự đại diện

-1

Đánh dấu văn bản bằng lệnh trực quan và sau đó sử dụng:

:!par 40j 

trong đó 40 là chiều rộng cột và jcó nghĩa là biện minh.


2
Chào mừng đến với trang web của chúng tôi! Câu hỏi của bạn hiện có chất lượng thấp vì nó thiếu giải thích về công cụ bạn đang sử dụng ( par) và lý do giải pháp của bạn hoạt động. Bạn có thể muốn thêm nhiều chi tiết hơn để cải thiện chất lượng câu trả lời của bạn và làm cho nó hữu ích hơn cho những người đọc trong tương lai.
statox
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.