Làm thế nào để vô hiệu hóa cuộn ngang?


37

Tôi có một số ký tự được giấu trong bộ đệm và cuộn ngang giết chết sự căn chỉnh thời gian lớn.

Có cách nào để vô hiệu hóa nó? Tôi không thể tìm thấy bất kỳ tùy chọn có liên quan.

demo cuộn ngang xấu

Chỉnh sửa: Đã thêm bản demo. Bạn có thể thấy vim dựa vào phần bù cuộn trên phần chưa được giải thích của tệp, do đó phần bị ngắt.


6
Bạn không thể vô hiệu hóa nó, nhưng bạn có thể:set wrap
EvergreenTree

8
@Enuy, ý tôi là các dòng thực sự dài hơn chiều rộng cửa sổ, nhưng một số văn bản (mã màu giống như bash) bị che giấu. Vì vậy, Vim nghĩ rằng nó đã chạm đến mép cửa sổ, nhưng trực quan thì không. Tôi muốn nói điều này đủ điều kiện là một lỗi.
tommcdo

8
@tommcdo Vâng, tôi hiểu ý của bạn. Có một vấn đề tương tự với gói dòng khi phần chỉ giấu ở phần cuối của đường là nguyên nhân của gói và nó đã WONTFIX từ Bram: code.google.com/p/vim/issues/detail?id=260
Enuy

3
Đó là lý do tại sao tôi đang tìm kiếm một giải pháp thay thế - để vô hiệu hóa cuộn ngang hoàn toàn.
Enuy

3
Điều gần nhất tôi có thể nghĩ đến là nếu bạn ở trong một thiết bị đầu cuối, bạn có thể sử dụng <c-s>để tạm dừng thiết bị đầu cuối để màn hình không cập nhật. Sau đó, bạn có thể mù quáng thực hiện các thay đổi và quay trở lại đầu dòng và nhấn <c-q>để tiếp tục. Các tùy chọn có lẽ không hữu ích khác: đảm bảo rằng cùng một số lượng ký tự được che giấu nằm giữa mỗi ký tự hiển thị hoặc mở rộng cửa sổ.
Matt Boehm

Câu trả lời:


2

Cách tắt cuộn ngang

Tôi đã viết một giải pháp vô hiệu hóa cuộn ngang, (bằng cách bỏ qua đề xuất của @ Ярос mặc dù là đề xuất ), nhưng tôi không nghĩ bạn sẽ thích nó:

augroup NoScrollPlease
  autocmd!
  autocmd CursorMoved * norm!99zH
augroup END

Điều này ngăn việc cuộn sang phải bằng phương pháp cực kỳ chính xác chỉ cần cuộn lại lần nữa. *

* Vì tôi không biết bạn đã cuộn sang bên phải bao xa hoặc các dòng của bạn dài bao nhiêu, tôi đang cuộn một lượng tùy ý "xa" 99 độ rộng màn hình. Cũng lưu ý rằng tôi không bận tâm kiểm tra xem bạn có thực sự cuộn sang phải hay không trước khi cuộn "trở lại" sang trái. Nếu bạn thực sự có ý định sử dụng giải pháp này, bạn có thể muốn đánh bật thứ gì đó bằng cách so sánh các giá trị của getcurpos(), 'sidescroll''columns'.

Tại sao bạn không muốn làm như vậy

Lý do bạn sẽ không sử dụng điều này là vì vấn đề cuộn bên dưới là một vấn đề khác: Vim sẽ không cho phép bạn di chuyển con trỏ "tắt màn hình". Do đó, nếu bạn cuộn sang trái theo cách mà con trỏ sẽ tắt màn hình sau khi cuộn, Vim sẽ đưa con trỏ đi cùng với nó và di chuyển nó sang bên trái một cách hữu ích.

Nhưng vì tính toán mà nó sử dụng cho việc con trỏ có ở trên màn hình giống với cách tính toán mà con trỏ đang sử dụng để quyết định có cuộn trong vấn đề ban đầu hay không, hiệu ứng ròng là với "giải pháp" này, nếu bạn cố gắng di chuyển con trỏ sang phải trong tình huống thường gây ra cuộn sang một bên, bây giờ con trỏ từ chối di chuyển. **

** Để chính xác hơn một chút, tùy thuộc vào vị trí hiện tại và chuyển động, con trỏ có thể di chuyển sang phải; nó sẽ không di chuyển qua vị trí thường xảy ra cuộn.

Sự lựa chọn khác?

Vì vậy, tôi sợ cách giải quyết theo kế hoạch của bạn sẽ không được triển khai. Nếu bạn muốn một giải pháp khả thi cho vấn đề chung, thì nó sẽ cần được triển khai trong mã nguồn Vim.

Như bạn đã lưu ý , điều này khó có thể đến sớm bất cứ lúc nào, vì vậy tôi sợ rằng cách tốt nhất của bạn là giải quyết cho trường hợp cụ thể của vấn đề được hiển thị trong gif của bạn là yêu cầu tác giả plugin ngừng sử dụng concealhoàn toàn và thay vào đó loại bỏ hoàn toàn văn bản ẩn khỏi bộ đệm.

Dựa trên đầu ra không được giải thích và đề cập đến vim-plugin-AnsiEsctrong tài liệu, đây có thể là điều mà họ có thể thực hiện, nhưng thật khó để nói chắc chắn nếu không có kiến ​​thức về cách thức hoạt động của plugin.


0

Nếu bạn có cách chỉnh sửa tệp, bạn có thể muốn bọc thiết lập màu với \[\], như được giải thích ở đây :

... là một ký tự không in [...]

Mặt khác, toàn bộ mã màu được coi là ký tự và do đó có thể được tính đến cho cuộn ngang.

Tôi không chắc đây là vấn đề, nhưng nhìn thấy nguồn của lịch (với syntax off) và hành vi hiện tại, nó làm tôi nghĩ về điều đó.


Vấn đề không phải là màu sắc, mà thay vào đó là các ký tự bị ẩn bởi concealtính năng (xem phần thảo luận trong các bình luận).
Giàu

Tôi hiểu. Có thể có điều gì đó tôi đã không nắm bắt tốt, nhưng tôi đã gặp vấn đề tương tự khi sử dụng PS1 bằng cách sử dụng các ký tự màu (thực tế là chúng không quan trọng) và thiết bị đầu cuối không trở lại chính xác trong một dòng mới. nơi, vì nó đang đếm các ký tự cho màu sắc là các ký tự hiệu quả, trong khi chúng phải được bỏ qua, vì chúng là vô hình. Hình ảnh động nhắc nhở tôi về vấn đề này (trong đó việc phân trang ngang được thực hiện "quá sớm", như thể nó dựa trên số ký tự trong dòng, đó là những gì được đề cập trong liên kết trong câu trả lời của tôi).
padawin

Hai vấn đề tương tự nhau, tôi đồng ý. Nhưng hành vi được mô tả trong câu hỏi này xảy ra do cách Vim đếm các ký tự (không phải thiết bị đầu cuối) và vì vậy đề xuất bạn đưa ra trong đoạn đầu tiên của bạn sẽ không giúp ích ở đây, tôi sợ.
Giàu

0

EDIT: Đây là một lỗi đã biết, đã đóng "sẽ không sửa": https://github.com/vim/vim/issues/260

Câu trả lời gốc:

Vim của tôi không cuộn theo chiều ngang cho đến khi con trỏ chạm vào cạnh màn hình.

Bạn đang sử dụng sidescrolloff?

Tôi không biết về việc tắt hoàn toàn cuộn ngang, nhưng cài đặt này sẽ khiến nó chờ cho đến khi con trỏ đi ra khỏi cạnh:

:set sidescrolloff=0

Vấn đề tồn tại ngay cả với 'sidescrolloff=0'vì Vim tin rằng con trỏ đã đi ra khỏi rìa: nó dựa trên tính toán của nó trên văn bản không được giải thích, chứ không phải văn bản hiển thị.
Giàu

Ồ, đó thực sự là lỗi. Tôi tìm thấy một báo cáo lỗi về điều này và thêm nó vào câu trả lời của tôi. Người bảo trì vim không muốn sửa nó.
JasonWagger

Không phải là sửa lỗi này ... nhưng có lẽ bạn có thể thực hiện tô màu lịch của mình bằng văn bản đơn giản trong bộ đệm và prop_type_add () và prop_add () cho màu sắc / v.v.
JasonWagger

Yup, đó là một người lập dị, nhưng báo cáo lỗi đó là lý do OP viết câu hỏi này để tìm cách giải quyết !
Giàu
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.