Đếm độ dài chuỗi được tô sáng trong VIM


23

Tôi tự hỏi có cách nào để đếm các biểu tượng được tô sáng trong vim(bao gồm cả khoảng trắng) không?

CẬP NHẬT

Chế độ trực quan VIM

Nó hiển thị số hàng nếu lựa chọn của tôi là trên nhiều hàng. Tôi cần đếm biểu tượng.

Câu trả lời:


28

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õ vvà 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.


4
(sững sờ) Làm thế quái nào tôi sử dụng Vim quá lâu và không bao giờ nhận thấy điều đó ? Nhưng trong sự bảo vệ của tôi, tôi đã suy nghĩ về việc có được số lượng theo chương trình.
njd

Câu trả lời tốt, nhưng hãy xem câu hỏi cập nhật. Cũng như @njd tôi không nhận thấy điều đó.
Nemoden

1
@Nemoden: Hãy thử phần thứ hai của đề xuất của garyjohn (g Ctrl-G). Nó sẽ hiển thị một dòng như "Số được chọn của # Dòng; # của # Từ; # của # Byte."
peth

Oh. Lỗi của tôi. Tôi không biết tại sao tôi lại bỏ qua giải pháp thứ hai. Nó hoạt động. Cảm ơn bạn!
Nemoden

11
Điều này không được bật theo mặc định trên một số hệ thống. Chỉ cần thêm set showcmdvào của bạn vimrcđể kích hoạt nó.
Tyler Holien

8

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

Như câu hỏi đã nói, ngay cả bình thường cũng vchuyể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.
joeytwiddle

2
:function VisualLength()
:  exe 'normal "xy'
:  echo "Visual: " . strlen(@x) . "\n"
:  exe 'normal gv'
:endfunction

:map ,q "xy:call VisualLength()<CR>
  1. Trước tiên, bạn kéo lựa chọn hiện tại (vào bộ đệm x)

  2. 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)

  3. 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.


2

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 wclệ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-Glà đặ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_cthông tin từ: /programming/1237780/vim-execute-shell-command-without-filtering

Bây giờ, nói chung hơn:

Ví dụ wcnà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 tidyjson-formattừ 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 đó.


1

Đố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=allhoạt động.)

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.