Tôi không biết làm thế nào để đạt được chính xác những gì bạn muốn, chỉ một phần.
Bạn muốn ẩn một số văn bản bên trong ~/.vimrc
(ví dụ).
Đầu tiên chúng ta cần biết nhóm đánh dấu nào xử lý văn bản bạn muốn ẩn. Thêm ánh xạ này vào ~/.vimrc
:
map <F10> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<'
\ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<"
\ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">"<CR>
Tôi đã lấy nó từ đây .
Tiếp theo đặt con trỏ của bạn vào một số văn bản bạn muốn ẩn, ví dụ như một nhận xét. Rồi đánh F10
.
Tên của nhóm đánh dấu sẽ xuất hiện trên dòng lệnh.
Trên hệ thống của tôi, đầu ra là:
hi<vimLineComment> trans<vimLineComment> lo<Comment>
Tôi nghĩ rằng nó có nghĩa là nhóm nổi bật cho các bình luận vim vimLineComment
và nó được liên kết với Comment
. Vì vậy, chúng tôi muốn ẩn văn bản được xử lý bởi nhóm đánh dấu vimLineComment
(hoặc Comment
).
Để đạt được điều này, chúng ta có thể sử dụng tính năng che giấu được thêm vào trong vim 7.3 ( :help conceal
).
:syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
Dòng này cho vim tìm kiếm văn bản có nhóm tô sáng vimLineComment
và khớp với biểu thức chính quy ^\".*
(bắt đầu một dòng ( ^
) theo sau là một trích dẫn kép ( \"
) theo sau bởi bất kỳ văn bản nào ( .*
)) và để ẩn và thay thế nó ở mọi nơi mà nó tìm thấy ( containedin=ALL
) với nhân vật >
( cchar=>
).
Các conceal
thuộc tính cú pháp sẽ ẩn văn bản chúng ta muốn, trừ khi con trỏ trên nó.
Tiếp theo, chúng tôi nói với vim để ẩn hoàn toàn văn bản trừ khi nó có một ký tự thay thế tùy chỉnh được xác định:
:set conceallevel=2
Có 4 giá trị có thể cho tùy chọn này với 4 hiệu ứng khác nhau (xem :help conceallevel
).
Vì chúng tôi không muốn nhập các lệnh đó mỗi lần, chúng tôi sẽ thêm tự động vào ~/.vimrc
:
augroup hide_text
autocmd!
autocmd FileType vim :set conceallevel=2 | :syntax match vimLineComment "^\".*" conceal containedin=ALL cchar=>
augroup END
Cuối cùng, chúng tôi thêm ánh xạ để chuyển đổi giá trị của conceallevel
tùy chọn (giữa 2 và 0; 2 = ẩn, 0 = hiển thị):
nnoremap <leader>h :<c-u>if (&conceallevel==2) \| set conceallevel=0 \| else \| set conceallevel=2 \| endif<cr>
Kết quả là văn bản sẽ được hiển thị / ẩn khi chúng ta nhấn <leader>h
.
Bạn cũng có thể thay đổi màu của ký tự thay thế:
highlight Conceal ctermfg=<code color> guifg=#<code color>
Và bạn có thể chọn chế độ bình luận sẽ được hiển thị. Ví dụ: nếu bạn muốn nó chỉ được hiển thị khi bạn ở trên dòng của nó ở chế độ chèn:
setlocal concealcursor=ncv
Tuy nhiên, tôi không biết làm thế nào để thu gọn tất cả các dòng ẩn như tính năng gấp này, xin lỗi.
Chỉnh sửa : một giải pháp có thể khác.
Bạn giữ các cài đặt gấp của mình để thu gọn các dòng bạn không muốn xem và bạn ẩn các tiêu đề của các nếp gấp để chúng không làm bạn mất tập trung.
function! FoldingTitle()
if (v:foldlevel>1)
let line = repeat(' ', &sw * (v:foldlevel-1)).'>'
else
let line = '|'
endif
return line
endfunction
set foldtext=FoldingTitle()
set fillchars+=fold:\
set foldcolumn=3 " optional
highlight FoldColumn ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color> "optional
highlight Folded ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color> "optional
Trong mã này, chúng tôi tùy chỉnh tiêu đề của các nếp gấp bằng cách đưa giá trị FoldingTitle()
cho foldtext
tùy chọn. Nó có nghĩa là chúng ta có thể thay đổi cách một nếp gấp sẽ nhìn qua chức năng này.
FoldingTitle()
chỉ trả về một biểu tượng để bạn biết có một nếp gấp ( >
trước một số khoảng trắng lặp lại hoặc |
tùy thuộc vào nếp gấp).
Sau đó, chúng tôi xác định ký tự khoảng trắng là ký tự được sử dụng để điền vào khoảng trống trên các dòng:
set fillchars+=fold:\
Đừng quên khoảng trống sau dấu gạch chéo ngược.
Cuối cùng, chúng tôi xác định một cột (có chiều rộng là 3) sẽ được hiển thị ở bên cạnh cửa sổ và sẽ chỉ ra các nếp gấp mở và đóng. Chúng tôi cũng tùy chỉnh màu của các nếp gấp cũng như màu của các tiêu đề của các nếp gấp. Mỗi trong số 3 dòng này là tùy chọn.
set foldcolumn=3 " optional
highlight FoldColumn ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color>
highlight Folded ctermfg=<code color> guifg=#<code color> ctermbg=<code color> guibg=#<code color>