Câu trả lời:
Trừ khi tôi thiếu một cái gì đó, Vim đã làm điều đó. Nếu tôi làm nổi bật một số văn bản bằng chuột hoặc bằng cách gõ v
và di chuyển con trỏ, tôi sẽ thấy ở dưới cùng của màn hình
- TẦM NHÌN - 12
trong đó số bên phải là số ký tự được tô sáng. Điều này chỉ hoạt động nếu lựa chọn nằm trên một hàng, nếu không nó sẽ hiển thị số hàng.
Bạn cũng có thể trực quan chọn một số vùng văn bản và loại g Ctrl-Gsẽ hiển thị số lượng dòng, từ và byte được chọn.
set showcmd
vào của bạn vimrc
để kích hoạt nó.
Vim chuyển đổi giữa hiển thị số ký tự và số dòng cho văn bản được hiển thị tùy thuộc vào nội dung và cách bạn hình dung (vim 7.4 được vá vào tháng 9 năm 2015)
V will display line count
v$ will display character count
Nếu bạn hình dung nhiều hơn một dòng, nó chỉ hiển thị số dòng
g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line
v
chuyển từ đếm ký tự sang đếm dòng nếu lựa chọn kéo dài nhiều dòng. Tuy nhiên g CTRL-G
, công việc độc đáo.
:function VisualLength()
: exe 'normal "xy'
: echo "Visual: " . strlen(@x) . "\n"
: exe 'normal gv'
:endfunction
:map ,q "xy:call VisualLength()<CR>
Trước tiên, bạn kéo lựa chọn hiện tại (vào bộ đệm x)
Sau đó, bạn hiển thị độ dài của bộ đệm đó: strlen(@x)
(The - VISUAL - được hiển thị trong dòng trạng thái che khuất điều này, vì vậy chúng tôi phải thêm một dòng mới)
Làm nổi bật phạm vi hình ảnh trước đó: gv
Điều này không tính đến việc chế độ trực quan là chế độ đường thẳng, ký tự hay khối, nhưng nó đủ cho hầu hết các trường hợp.
Tôi thấy từ ảnh chụp màn hình của bạn rằng bạn đang chạy trong Windows, vì vậy câu trả lời này có thể không giúp bạn nhiều. Nhưng đối với những người khác ...
Một tính năng chưa được sử dụng (IMO) của Vim là để các lệnh bên ngoài thực hiện việc nâng vật nặng.
Trong trường hợp này, nếu bạn đang sử dụng một hệ thống giống như UNIX, bạn có thể sử dụng wc
lệnh để làm điều đó.
Cách đơn giản nhất là thay thế văn bản đã chọn bằng đầu ra của lệnh, bằng cách nhập (với văn bản đã chọn):
:!wc
(sau đó nhấn enter).
Điều này sẽ hiển thị trong dòng lệnh của bạn như:
'<,'>!wc
Sau khi bạn đọc thông tin, bạn có thể hoàn tác u
để quay lại nơi bạn đã bắt đầu.
Lưu ý: Việc xử lý này chỉ được thực hiện trên toàn bộ dòng . Nếu bạn muốn một phần dòng, tôi nghĩ @ garyjohn's g_CTRL-G
là đặt cược tốt nhất của bạn.
Bạn có thể tránh sự cần thiết phải hoàn tác bằng cách chạy:
:w !wc
Điều này "ghi" các dòng được chọn vào đầu vào tiêu chuẩn của lệnh và đầu ra của lệnh sẽ được hiển thị trong bộ đệm tạm thời mới, khiến cho bản gốc không bị ảnh hưởng. Xem :help :write_c
để biết thêm.
Lưu ý: Tôi đã nhận được :write_c
thông tin từ: /programming/1237780/vim-execute-shell-command-without-filtering
Bây giờ, nói chung hơn:
Ví dụ wc
này khá đơn giản, nhưng bạn có thể tưởng tượng đây là một cách tiếp cận mạnh mẽ như thế nào. UNIX đã có sẵn rất nhiều lệnh xử lý văn bản và bạn có thể sử dụng chúng bên trong Vim khá dễ dàng mà không cần phải chạm vào Vimscript (yech).
Hơn nữa, bất kỳ chương trình dòng lệnh nào bạn viết có liên quan đến stdin / stdout giờ đây không chỉ có lợi cho bạn tại thiết bị đầu cuối của bạn, mà còn trong Vim.
Tôi thấy mình, ví dụ, chạy tidy
và json-format
từ bên trong vim để tạo các tệp tôi đang xem dễ đọc hơn.
Bạn có thể làm tương tự trên Windows, nhưng Windows không có sẵn một bộ lệnh phong phú như vậy. Tuy nhiên, bạn luôn có thể cài đặt GNUWin32 hoặc tương tự để có được những lợi ích đó.
Đối với cách lập trình trong vimscript, điều này hiệu quả với tôi khi lựa chọn bị giới hạn trong một dòng:
let amount = virtcol("'>") - virtcol("'<")
(Sử dụng virtcol(..)
thay vì col(..)
, như vậy nó hoạt động như mong đợi khi :set ve=all
hoạt động.)