VIM: điểm đạn gấp


7

Tôi còn khá mới mẻ với VIM, nhưng đã cố gắng tự dạy mình trong tuần qua, nhưng tôi đang gặp phải một vấn đề đã được chứng minh là khá bực bội:

Hiện tại tôi chủ yếu sử dụng VIM để ghi chú và sử dụng khả năng gấp của VIM để làm cho công việc của tôi bớt lộn xộn hơn. Tuy nhiên, tôi đã gặp phải một vấn đề, trong đó mọi điểm đạn, vượt ra ngoài đường đột phá đã đặt của tôi, tự gập lại. Để rõ ràng hơn:

VIM tôi nhập mô tả hình ảnh ở đây

Tôi muốn không có điểm đạn duy nhất gấp.

Tôi dường như đã tìm ra vấn đề theo cách văn bản của tôi được thụt lề: vì việc gấp dường như xảy ra ở cấp độ thụt lề theo mặc định, dấu đầu dòng của tôi gấp lại do dòng thứ hai bị 'thụt' nhiều hơn. Vì vậy, tôi tập hợp có lẽ có những cách mơ hồ để giải quyết vấn đề này: bảo VIM gấp lại nếu vết lõm trên dòng tiếp theo lớn hơn 1 hoặc xử lý cách các điểm đạn được bọc hoàn toàn khác nhau.

Làm thế nào những giải pháp này có thể được thực hiện?


Tôi sử dụng một plugin có tên Workflowish , vì vậy đây là vimrc của tôi:

set tw=100
set formatoptions=tcq
set com=fb:*
set spell
set spelllang=de
colorscheme synic
set fileencoding=utf8
execute pathogen#infect()
syntax on
filetype plugin indent on

Và đây là những gì các plugin tự thiết lập:

setlocal foldlevel=1
setlocal foldenable
setlocal sw=2 sts=2
setlocal expandtab
setlocal foldtext=WorkflowishFoldText()
setlocal foldmethod=expr
setlocal foldexpr=WorkflowishCompactFoldLevel(v:lnum)
setlocal autoindent

Nghe có vẻ như là một vấn đề mà bạn nên gửi cho tác giả của plugin, không phải ở đây.
Ingo Karkat

Tôi đã có, ngay cả khi tôi thử làm nó mà không có plugin, vấn đề tương tự vẫn tồn tại, do đó tôi tin rằng nó là độc lập với plugin.
montauk

Câu trả lời:


4

Thật không may, không có cách nào để làm điều này mà không có sự hỗ trợ từ plugin. (Sắp xếp.)

Các dòng chính ở đây là:

setlocal foldmethod=expr
setlocal foldexpr=WorkflowishCompactFoldLevel(v:lnum)

Đầu tiên có nghĩa là "sử dụng giá trị của 'foldexpr'để xác định mức độ gấp của mỗi dòng". Bộ thứ hai tùy chọn sử dụng giá trị của hàm được xác định trong plugin.

Folding trong Vim dựa trên cấp độ gấp. Trong foldmethod=expr, mỗi dòng được gán một mức gấp (một số nguyên) bởi 'foldexpr'. Những cấp độ xác định nơi các nếp gấp bắt đầu và kết thúc.


Giải pháp 1 : Viết mới 'foldexpr'.

Điều này có thể gọi WorkflowishCompactFoldLevel(), nhưng điều chỉnh giá trị để các mục đạn nhiều dòng không bị gập lại. Tuy nhiên, tôi sẽ để nó như một bài tập, vì tôi nghĩ đó là cách tiếp cận sai. Điều này đưa chúng ta đến:


Giải pháp 2 : Làm cho cách nó hoạt động bây giờ không phải là một vấn đề.

Tôi nghĩ vấn đề thực sự không phải là những nếp gấp này tồn tại, mà là chúng đang cản trở bạn. Bạn có thể mô tả những gì bạn làm khiến bạn thậm chí nhận thấy rằng những nếp gấp này là ở đó? Nó có thể là một vấn đề của việc thiết lập bắt đầu của bạn 'foldlevel'một cách thích hợp cho ft=workflowishbộ đệm.

Lý tưởng nhất, bạn sẽ không nhận thấy rằng những nếp gấp này tồn tại cho đến khi bạn thực sự cố gắng đóng nó.


Cảm ơn rất nhiều cho câu trả lời chi tiết của bạn! Đặc biệt giải pháp thứ hai của bạn là rất hữu ích. Tôi không chắc chắn nếu điều này quá 'hackish' một cách để giải quyết vấn đề của tôi, nhưng tôi vừa thêm các dòng sau vào .vimrc: autocmd BufWinLeave *.* mkviewautocmd BufWinEnter *.* silent loadview. Nó dường như đang làm việc bây giờ!
montauk

Huh, tôi chưa bao giờ sử dụng lượt xem trước đây. Khéo léo!
Peeja
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.