VIM 상태 표시 줄에 줄 수를 천 단위 구분 기호로 표시 할 수 있습니까? 가능하면 맞춤 수천 단위 구분 기호가 좋습니까?1000 단위 구분 기호가있는 상태 표시 줄의 VIM 회선 수?
예 :
set statusline=%L
대신 "1234567"의 "1234567"로 연결되어야합니다.
VIM 상태 표시 줄에 줄 수를 천 단위 구분 기호로 표시 할 수 있습니까? 가능하면 맞춤 수천 단위 구분 기호가 좋습니까?1000 단위 구분 기호가있는 상태 표시 줄의 VIM 회선 수?
예 :
set statusline=%L
대신 "1234567"의 "1234567"로 연결되어야합니다.
나는 방법을 발견했지만 그것은 약간 미친 같습니다
는set statusline=%{substitute(line('$')\,'\\d\\zs\\ze\\%(\\d\\d\\d\\)\\+$'\,'\,'\,'g')}
백 슬래시의 첫 번째 라운드는 set
(나는 ,
및 \
자체를 탈출해야) 단지입니다. 실제로이 문자열하는 옵션을 설정하고있어 무엇
: 형식 문자열로
%{substitute(line('$'),'\d\zs\ze\%(\d\d\d\)\+$',',','g')}
,이 라인은 %{...}
하나 개 포맷 코드가 포함되어 있습니다. ...
에있는 모든 것이 표현식으로 평가되고 그 결과가 다시 대체됩니다.
내가 평가하는 표현식은 (실제 코드에 추가 한 경우, set
에 대해이 코드를 이스케이프 처리해야합니다. 다시,)) 아직 더 백 슬래시를 강제 :
substitute(line('$'), '\d\zs\ze\%(\d\d\d\)\+$', ',', 'g')
이것은 substitute
함수를 호출합니다. 인수는 소스 문자열, 정규 표현식, 대체 문자열 및 플래그 목록입니다.
우리가 시작하는 문자열은 line('$')
입니다. 이 호출은 현재 버퍼의 라인 수 (또는 버퍼의 마지막 라인 수)를 반환합니다. 이것은 %L
가 정상적으로 보여주는 것입니다.
우리가 찾고있는 검색 패턴은 \d(\d\d\d)+$
(특별한 광적 제거가 제거됨)입니다. 즉, 숫자 뒤에 하나 이상의 3 자리 그룹이 있고 그 뒤에 문자열이옵니다. 그룹핑은 vim에 \%(
\)
이며 "1 이상"은 \+
이며 이는 \d\%(\d\d\d\)\+$
입니다. 마술의 마지막 비트는 \zs\ze
입니다. \zs
은 일치하는 문자열의 시작을 설정합니다. \ze
끝이 설정됩니다. 이것은 마치 \zs
이전의 모든 것이 look-behind 패턴이고 \ze
이후의 모든 것이 look-ahead 패턴이었던 것처럼 작동합니다.
다음과 같이 표시됩니다. 소스 문자열에서 숫자가 앞에오고 그 다음에 정확히 N 자릿수 (N은 3의 배수)가 오는 모든 위치를 찾습니다. 이 작업은 오른쪽에서 시작하여 왼쪽으로 가면서 매번 3 자리를 건너 뛰는 것과 같습니다. 이것은 쉼표를 삽입해야하는 위치입니다.
대체 문자열은 ','
(쉼표)입니다. 길이가 0 인 문자열과 일치하기 때문에 을 ','
으로 대체하여 소스 문자열에 효과적으로 삽입합니다.
마지막으로 g
플래그는 첫 번째 플래그뿐만 아니라 모든 일치 항목에 대해이를 수행합니다.
TL; DR :
line('$')
우리가%{
}
우리가
statusline
에 임의의 식을 삽입 할 수 있습니다를 원하는 "그러나 여기서 우리에게substitute(..., '\d\zs\ze\%(\d\d\d\)\+$', ',', 'g')
쉼표를 추가 라인의 수를 제공 조금 미쳤어 요? " 그것은 아름다움입니다 :-). 두 가지 언급 : (1) 분리 기호를 변경해야하는 경우, 마지막 "\,"옆에 있습니다. (2) 구분 기호가 작은 따옴표 인 경우 "\ '\'"로 두 배가되어야합니다. –