[첫화면으로]"ViEditor" 페이지의 변경 내역

마지막으로 [b]


현재 버전 . . . . 2025-3-10 11:19 am 수정한 사람: Raymundo [Tips - ]
117 번째 수정본 . . . . 2024-8-6 11:39 pm 수정한 사람: Raymundo
 

변경사항 (가장 최근의 "일반적인 수정"부터) (다른 변경사항 없음)

-835,6 +835,39
=== # (4) 153화 ===
=== # (5) 154화 ===
}}}
=== # 따옴표 쌍 안에 있는 문자열에 대해서만 특정한 치환 적용하기 ===
예를 들어 Nginx 로그에는 따옴표 안에 공백 문자가 들어가 있어서, awk 등으로 필드를 쪼갤 때 많이 불편하다. 그래서 따옴표로 둘러싸인 내부에서만 공백 문자를 '_' 등으로 치환하고자 한다.
{{{
   ab cd "ef gh" ij kl "mn op qr" st uv
=> ab cd "ef_gh" ij kl "mn_op_qr" st uv
}}}
첫번째 시도는 정규식의 lookbehind를 사용하여, "왼쪽에 따옴표가 홀수 번 있는" 경우에 한하여 치환을 하게 한다.
{{{#!vim vim
%s/\v(^([^"]*"[^"]*")*[^"]*"[^"]*)@<= /_/g
}}}
성공은 하는데, 11만 라인의 텍스트에서 수행하는데 95초 정도가 소요됨
챗GPT에게 물어봐서, 검색 결과를 vimscript의 함수에 넣어서 치환
{{{#!vim vim
%s/\v"([^"]*)"/\= '"' . substitute(submatch(1), ' ', '_', 'g') . '"' /g
}}}
{{{
\v"([^"]*)" - 따옴표로 둘러싸인 부분만 검색
\= - 뒤에 오는 부분을 vimscript 식으로 평가
submatch(1) - 검색에서 ( ) 로 둘러싸여 캡처된 텍스트
substitute() - 공백을 _로 전역 치환
'"' 와 . - 문자열 연결
}}}
== # 유용한 옵션들 ==
* set backupdir=~/.vim/backup
** 이미 존재하는 화일을 수정하여 저장할 때 생성되는 백업화일 (화일명 뒤에 ~가 붙는다) 이 지저분하므로, 이런 백업화일이 지정된 디렉토리에 생성되게 한다