2012-12-11 2 views
4

나는VIM을 사용하여 두문자어를 만드시겠습니까?

Light Machine Gun 
Statistical Analysis System 
etc 

내가 라인에있는 모든 단어의 첫 번째 문자를 캡처하고 약자를 만들고 싶어 할 .... 같은 전체 이름이 많이있는 파일이 있습니다. 예를 들어 Light Machine Gun은 LMG 등이 될 것입니다. 저는 VI 편집기에서 그것을 매크로로 기록하고 전체 파일에 걸쳐 실행하려고합니다. 누군가가 저를 도울 수 있다면 좋겠습니까? 미리 감사드립니다.

답변

5

한 줄에 하나의 이름을 가정하고 단어를 공백으로 구분, 다음 작품 것을 :

: 당신이 각 문자를 대문자로 할 경우

%s/\(\w\)\w*\ */\1/g 

는 업의 경우 플래그 (\u)를 추가

%s/\(\w\)\w* */\u\1/g 

은 "매우 마법"버전 (:help /magic 참조)

%s/\v(\w)\w*\s*/\u\1/g 
+2

시도해 보셨습니까? 작동하지 않습니다. 그러나 이것은 '% s/\ (\ w \) \ w * \ s */\ 1/g'입니다. – glts

+0

@glts : 게시했는데 게시 할 때 잘못된 비트를 복사했습니다. 감사. – Thor

+0

'% s/\ (\ w \) \ w * \ s +/\ 1/g'가 작동하지 않는 이유를 알고 계십니까? 여러 개의 공백과 일치해야합니다. 맞습니까? (나는 vim regex에 익숙하지 않다.) – oyenamit

3
:ab LMGSAS Light Machine Gun Statistical Analysis System 

을 그리고 당신은 LMGSAS를 입력 할 때마다 그것은 당신을 위해 그것을 대체 할 :빔이 약어를 정의 할 수 있습니다,라는 약어, 당신은

Light Machine Gun Statistical Analysis System -> LMGSAS 

그냥 입력 싶은 말은.

모든 약어를 나열하려면 :ab을 사용하고 una xxxxx을 사용하면 무언가를 줄여 쓸 수 있습니다. 그리고 마침내 abc은 모든 것을 지 웁니다.

편집 : 귀하의 질문에 오해 하셨다면, 단어 -> 약어를 입력 한 다음 토르가 제안한 정규 표현식 s/\(\w\)\w*\s*/\1/g이 제대로 작동합니다.

+0

질문에 직접 답변하지는 않지만, 다른 방법으로 일하기를 원한다면 알아 두는 것이 좋습니다. –

+0

질문을 해결하기 위해 실제 방법을 포함하도록 편집했습니다. 분명히 사람들은이 답변을 유용하다고 생각 했으므로 그대로 두겠습니다. – jozefg

관련 문제