vim mapping관련 질문드립니다

o12bank1의 이미지

다름이 아니라 제가
vimrc를 만들고 있는데

vmap :s@//.*@@e
이런구문을 봤습니다
위에 동작은 잘 알고 있는데

도대체 문법이 아무리 찾아봐도 모르겠더라고요

블록지정시
s
@
//
.*
@@
e
여기서 위에 내용들이 어떤의미를 가지는지 솔직히 궁금해서 찾는데 잘모르겠습니다...
답변부탁드릴게요

raymundo의 이미지

"위에 동작은 잘 알고 있는데" - 이런 경우는 답변자가 불필요한 시간을 들이지 않도록 그 동작이 뭔지도 적어주시면 더 좋겠죠? :)

암튼 저건

:s - substitute 치환명령

그 다음 @ 는 그저 구분자입니다. 보통 치환할 때

:[범위]s/찾을패턴/대체할문자열/옵션

이렇게 슬래쉬로 구분을 하는데, 이 경우는 찾을 패턴에 슬래쉬가 있으니까
:s/\/\/.*//e

이렇게 일일이 백슬래쉬를 적어줘야 하는데 그게 귀찮으니 구분자를 다른 문자를 쓴 거네요.

// 이건 문자 그대로 슬래쉬 두 개
. 정규표현식에서 '임의의 문자 하나'
* 정규표현식에서 앞의 내용이 '0번 이상 반복되는 것'을 의미합니다.
그래서
.* 이것은 어떤 문자열(빈 문자열을 포함하여)에도 일치하는 패턴이 되고
//.* 이건 "백슬래쉬 두개와 그 뒤에 임의의 문자열"을 의미하는 패턴이니까 C++이나 자바 등의 코멘트에 매치하려는 건가보네요.

여기까지가 찾을 패턴이고 그 다음은 대체할 문자열을 적을 자리인데 거기가 비어있으니까 그냥 지우기만 하겠다는 얘기고,

마지막 e 는 저도 몰랐는데 :help substitute 해서 찾아보니까
원래 검색에 실패하면 에러메시지가 뜨는데 그러면 maps 를 처리하던 게 중단되어 버리니까
이런 에러메시지를 출력하지 말라는 옵션이라고 나와 있군요.

좋은 하루 되세요!

o12bank1의 이미지

정말 감사합니다

//------------
이런구문이 있다면 이거 이하를 전부 삭제하는 구문인가보네요~~~

o12bank1의 이미지

어제도 댓글을 드렸지만
기본동작은 슬래시 있는 라인을 삭제 하는 구문입니다

답변중에 약간 의문이 있어서요~~죄송합니다 ~~
@는 구분자라고 하셨는데
그러면
\/\/ 과 @//는 같은 의미로 보이는데
보통 백슬래시하나당 한문자를 지정하는데
그러면 @는 그럼 범위가 한문자나 기호가 아닌 연속된건 즉 예를 들어

\/\/\\ 이런 구문이 있다면 @//\ 과 같은 의미인지요....

그리고 전체적으로 다시 의미를 곰곰히 생각을 했는데 아직도 이해가 확오지를 않아서요...
우선
@//.* : // 이하 라인을 찾는거라 보이고요
@@ : 여기서 @의 문법도 구분자인가요?
e : 말씀하신것을 읽어도 확이해가 가지 않네요 ..

죄송합니다... 저도 더 찾아보겠습니다 보시면 다시한번 이해 하기 쉽게 부탁드립니다...감사합니다

raymundo의 이미지

구분자란 게 대단한 게 아니고 말 그대로 여러 값들을 구분하기 위한 경계를 표시하는 거 얘깁니다.

abc 를 ABC 로 치환
:s/abc/ABC/

명령어 부분 :s
찾을 패턴 부분 abc
치환할 문자열 부분 ABC

이 세 가지를 구분할 수 있게 넣는 게 저 / 인데,

// 를 -- 로 치환
:s////--/

이건 안 됩니다. 찾을 패턴으로 쓴 / 과 구분자 / 를 구분할 수 없어서.
그래서 / 자체를 패턴이나 문자열 자리에 적으려면 백슬래시를 앞에 붙여서 이스케이프 시키죠.

:s/\/\//--/

근데 패턴이나 문자열 자리에 / 를 넣을 때마다 \를 같이 붙여주자니 너무너무너무 귀찮고, 보기도 싫고, 타이핑하다가 실수하기도 쉽고 그러니까, :substitute 명령을 쓸 때 구분자로 꼭 슬래시를 쓰는게 아니라 다른 걸 쓸 수도 있게 한 겁니다.

abc 를 ABC 로 치환
:s@abc@ABC@
 
// 를 -- 로 치환
:s@//@--@
이제는 / 가 구분자와 혼동될 염려가 없으니까 그냥 쓰면 됨.
 
@@ 를 oo 로 치환
:s@\@\@@oo@
대신 이번에는 @를 쓰려면 백슬래쉬를 붙여줘야겠죠. 물론 그보다는 그냥 다른 구분자를 쓰는게 낫고요.
(근데 @는 원래 다른 용도가 있어서 무조건 백슬래쉬를 붙여줘야 했던가? 기억이 안 나네요)

마지막의 e 옵션은... 저게 있을 때와 없는 경우를 각각 만들어보시고, 해당패턴(//로 시작하는 코멘트)이 존재하지 않는 텍스트 문서에서 실행해보시면 차이가 날 것 같습니다. 어쩌면 안 날 수도 있고.

좋은 하루 되세요!

o12bank1의 이미지

이제 명확하게 이해가 되었네요 진심으로 감사드립니다^^

qiiiiiiiip의 이미지

@ 대신에 , 를 쓰면 좀 보기가 좋으려나요..

현재 라인의 AAA 를 BBB로 치환 (first occurance only)
:s,AAA,BBB,
 
현재 라인의 AAA 를 삭제 (first occurance only)
:s,AAA,,
 
현재 라인의 모든 문자를 삭제
:s,.*,,
 
현재 라인에서 // 및 이후의 모든 문자를 삭제
:s,//.*,,

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.