VIM에서 강조 표시된 문자열 길이 계산


23

vim(공백 포함) 에서 강조 표시된 기호를 계산하는 방법이 있는지 궁금 합니다.

최신 정보

VIM 비주얼 모드

선택한 항목이 여러 행에 있으면 행 수를 표시합니다. 기호 개수가 필요합니다.

답변:


28

내가 빠진 것이 아니라면, Vim은 이미 그렇게합니다. 마우스를 사용하거나 v커서 를 입력 하고 이동 하여 일부 텍스트를 강조 표시 하면 화면 하단에

-시각-12

여기서 오른쪽의 숫자는 강조 표시된 문자의 수입니다. 선택이 단일 행에있는 경우에만 작동하고, 그렇지 않으면 행 수를 표시합니다.

또한 g Ctrl-G선택된 행 수, 단어 및 바이트 수를 표시하는 텍스트 및 유형의 일부 영역을 시각적으로 선택할 수 있습니다 .


4
도대체 어떻게 오랫동안 Vim을 사용했고 사실 눈치 채지 못했 습니까? 그러나 나는 방어 할 때 프로그래밍 방식으로 숫자를 얻는 것에 대해 생각하고있었습니다.
njd

좋은 답변이지만 업데이트 된 질문을 살펴보십시오. @njd뿐만 아니라 나는 그것을 알지 못했습니다.
Nemoden

1
@ 네모 덴 : garyjohn의 제안의 두 번째 부분을 시도하십시오 (g Ctrl-G). "Selected # of # Lines, # of # Words, # of # Bytes"와 같은 줄을 보여 주어야합니다.
peth

오. 내 잘못이야. 왜 두 번째 솔루션을 건너 뛰었는지 모르겠습니다. 작동합니다. 고맙습니다!
Nemoden

11
일부 시스템에서는 기본적으로 활성화되어 있지 않습니다. 사용하도록 추가 set showcmd하기 만하면 vimrc됩니다.
Tyler Holien

8

Vim은 시각화 대상 및 방법에 따라 시각화 된 텍스트의 문자 수와 줄 수를 표시합니다 (vim 7.4는 2015 년 9 월에 패치 됨)

V will display line count
v$ will display character count

둘 이상의 라인을 시각화하면 라인 수만 표시합니다

g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line

질문에 따르면 v선택 항목이 여러 줄에 걸쳐 있으면 일반 문자 조차도 문자 수에서 행 수로 전환됩니다. 그러나 g CTRL-G일을 훌륭하게 수행합니다.
joeytwiddle

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

:map ,q "xy:call VisualLength()<CR>
  1. 먼저 현재 선택을 잡아 당깁니다 (버퍼 x로)

  2. : 그럼 당신은 그 버퍼의 길이를 표시 strlen(@x)
    합니다 (이 - VISUAL - 우리가 줄 바꿈을 추가 할 수 있도록 상태 표시 줄에 표시가,이 모호)

  3. 이전 가시 범위를 강조 표시하십시오. gv

이것은 비주얼 모드가 라인, 문자 또는 블록 모드인지 여부를 고려하지 않지만 대부분의 경우 충분합니다.


2

스크린 샷에서 Windows에서 실행중인 것으로 보이 므로이 답변이 도움이되지 않을 수 있습니다. 하지만 다른 사람들에게는 ...

Vim의 미사용 (IMO) 기능은 외부 명령으로 많은 작업을 수행하는 것입니다.

이 경우 UNIX 계열 시스템 인 경우 wc명령을 사용하여 이를 수행 할 수 있습니다 .

가장 간단한 방법은 (텍스트를 선택한 상태에서)를 입력하여 선택한 텍스트를 명령의 출력으로 바꾸는 것입니다.

:!wc

그런 다음 Enter 키를 누릅니다.

명령 줄에 다음과 같이 표시됩니다.

'<,'>!wc

정보를 읽은 후 u시작 위치로 돌아 가기 위해 실행 취소 할 수 있습니다 .

참고 :이 처리는 전체 라인 에서만 수행 됩니다. 부분 라인을 원한다면 @ garyjohn 's g_CTRL-G가 최선의 방법 이라고 생각 합니다.

대신 다음을 실행하여 실행 취소 할 필요가 없습니다.

:w !wc

그러면 선택한 행이 명령의 표준 입력에 "쓰기"되고 명령의 출력이 새로운 임시 버퍼에 표시되고 원본은 그대로 유지됩니다. 자세한 내용 :help :write_c은 참조하십시오 .

참고 : /programming/1237780/vim-execute-shell-command-without-filtering 에서 :write_c정보를 얻었습니다 .

이제 더 일반적으로 :

이 예제 wc는 매우 단순하지만 이것이 어떻게 강력한 접근 방식인지 상상할 수 있습니다. UNIX에는 이미 사용 가능한 많은 텍스트 처리 명령이 있으며 Vimscript (yech)를 건드리지 않고도 Vim에서 매우 쉽게 사용할 수 있습니다.

또한 stdin / stdout을 다루는 모든 명령 줄 프로그램은 이제 터미널뿐만 아니라 Vim 내부에서도 이점을 얻을 수 있습니다.

예를 들어, vim 내부에서 실행 tidy하여 json-format찾고있는 파일을 더 읽기 쉽게 만듭니다.

Windows에서도 동일한 작업을 수행 할 수 있지만 Windows에는 이러한 풍부한 명령 세트가 내장되어 있지 않습니다. 그래도 GNUWin32 또는 이와 유사한 것을 설치 하여 이러한 이점을 얻을 수 있습니다 .


1

vimscript 내에서 프로그래밍 방식으로 선택이 한 줄로 제한되면 나에게 도움이되었습니다.

let amount = virtcol("'>") - virtcol("'<")

( 활성 상태 일 때 예상대로 작동하도록 virtcol(..)대신 대신 사용 )col(..):set ve=all

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.