Có lệnh nào để xác định độ dài của đường dài nhất trong vim không? Và để thêm chiều dài đó vào đầu tệp?dòng dài nhất trong vim?
Trả lời
Lệnh wc của Gnu có tùy chọn -L -max-line-length in ra độ dài dòng tối đa của tệp. Xem gnu man wc. Freebsd wc cũng có -L, nhưng không phải là - max-line-length, xem freebsd man wc.
Cách sử dụng chúng từ vim? Lệnh:
:%!wc -L
Sẽ lọc tệp mở qua wc -L và làm cho nội dung của tệp có độ dài dòng tối đa.
Để giữ lại các nội dung tập tin và đặt dài dòng tối đa trên dòng đầu tiên làm:
:%yank
:%!wc -L
:put
Thay vì sử dụng wc, Find length of longest line - awk bash mô tả làm thế nào để sử dụng awk để tìm chiều dài của dòng dài nhất.
Ok, bây giờ cho một giải pháp Vim nguyên chất. Tôi hơi mới để viết kịch bản, nhưng ở đây đi. Nội dung sau dựa trên hàm FilterLongestLineLength từ textfilter.
function! PrependLongestLineLength ()
let maxlength = 0
let linenumber = 1
while linenumber <= line("$")
exe ":".linenumber
let linelength = virtcol("$")
if maxlength < linelength
let maxlength = linelength
endif
let linenumber = linenumber+1
endwhile
exe ':0'
exe 'normal O'
exe 'normal 0C'.maxlength
endfunction
command PrependLongestLineLength call PrependLongestLineLength()
Đặt mã này vào tệp .vim (hoặc .vimrc) và: nguồn tệp. Sau đó, sử dụng lệnh mới:
:PrependLongestLineLength
Cảm ơn bạn đã hiểu điều này thật thú vị.
Tôi đã vào một cái gì đó như! Awk '{print (length ($ 0))}'
Thậm chí nếu Jonathan (pre-vim-7) giải pháp là một chút phức tạp, ông là đúng trong việc sử dụng 'virtcol()', tabulations sẽ không được tính là '1'. Tôi sợ tất cả các giải pháp khác dựa trên wc, awk, perl, vv sẽ không đưa ra câu trả lời đúng. –
Nếu bạn làm việc với các bảng biểu mở rộng, đơn giản
:0put=max(map(getline(1,'$'), 'len(v:val)'))
là đủ.
Nếu không, tôi đoán chúng tôi sẽ cần những điều sau đây (mà bạn có thể tìm thấy như ví dụ cuối cùng trong :h virtcol()
, trừ -1):
0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))
Tôi sẽ không gọi dòng đó là "đơn giản". Nó hoạt động mặc dù, do đó, không có khiếu nại. – sleske
: wc -L%
hơn
:%! wc -L
Để thêm chiều dài đó vào đầu tệp:
: 0r! wc -L% | cut -d '' -f1
Lợi thế của '%! Wc -L' là nó hoạt động trên bộ đệm chưa được lưu hoặc chưa được đặt tên. – wchargin
- 1. Sửa các dòng chú thích quá dài trong Vim
- 2. Vim, đường dài và cuộn
- 3. Xóa dòng mới trong Vim
- 4. Màu cú pháp Vim: Làm thế nào để tô sáng các dòng dài?
- 5. Vim: Thay thế kết thúc của dòng
- 6. vim cuối dòng
- 7. Làm cách nào để khắc phục hành vi vi phạm dòng của Vim đối với các dòng dài bằng Python?
- 8. Cắt và dán nhiều dòng trong vim
- 9. Trong Vim, cách đơn giản nhất để nối tất cả các dòng trong một tệp vào một dòng là gì?
- 10. Chạy tập lệnh vim từ dòng lệnh vim
- 11. Chiều dài của từ dài nhất trong một danh sách
- 12. Vim: Tách các từ thành các dòng?
- 13. Lệnh thuyết phục nhất trong Vim
- 14. Vim: Thụt lề dòng (trống) dòng và chèn
- 15. Lấy phần tử dài nhất trong Dict
- 16. Chuỗi dài nhất trong mảng object_ gumpy
- 17. Chèn thụt đầu dòng cho các cột trong Vim
- 18. Vim Cấu hình số dòng màu
- 19. emacs như-vim ruby thụt đầu dòng
- 20. Dừng các dòng bao bì Vim ở giữa một từ
- 21. Vim thụt đầu dòng cho mẫu C++?
- 22. Tìm kiếm và thay thế Vim - giới hạn ở một số dòng nhất định
- 23. Vim yanking phạm vi của dòng
- 24. Vim Dòng lệnh Thoát Thời gian chờ
- 25. Thêm số dòng vào mã nguồn trong vim
- 26. cách thay đổi^M thành dòng mới trong vim?
- 27. Cách thêm văn bản ở cuối mỗi dòng trong Vim?
- 28. Thụt lề thụt đầu dòng với CSS trong Vim
- 29. Cách sắp xếp các dòng UTF-8 trong Vim?
- 30. Nhấn "Trang chủ" trong Vim trên Đường thụt dòng
Điều này có được thực hiện trong Vim không? Tôi hỏi vì đây là một điều khá cụ thể để muốn làm, và có lẽ sẽ nhanh hơn khi đặt cùng một kịch bản Python/Perl/Ruby để thực hiện nếu bạn cần nó trên nhiều tệp. – ZoogieZork
Điều này nghe giống như yêu cầu của bạn cho các giải pháp sai cho vấn đề thực tế. Chính xác là bạn đang cố đạt được điều gì? – soulmerge
@ ZoogieZork: đôi khi vim là đủ, và đơn giản là đủ, không cần phải sử dụng các công cụ bên ngoài. –