λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

λ¦¬λˆ…μŠ€ νŽΈμ§‘κΈ° vi ν™˜κ²½μ„€μ • ν•˜λŠ” 법

by 5566 2023. 11. 1.

1. λ¦¬λˆ…μŠ€ νŽΈμ§‘κΈ° vi μ†Œκ°œ

λ¦¬λˆ…μŠ€ 운영 μ²΄μ œμ—μ„œ κ°€μž₯ 널리 μ‚¬μš©λ˜λŠ” ν…μŠ€νŠΈ νŽΈμ§‘κΈ° 쀑 ν•˜λ‚˜μΈ "vi"λŠ” μœ λ‹‰μŠ€ μ‹œμŠ€ν…œμ—μ„œ λ°œμ „λœ κ²ƒμž…λ‹ˆλ‹€. 터미널 ν™˜κ²½μ—μ„œ μ‚¬μš©λ˜λ©°, μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 쑰금의 ν•™μŠ΅μ΄ ν•„μš”ν•©λ‹ˆλ‹€. vi의 κ°€μž₯ 큰 νŠΉμ§•μ€ ν‚€λ³΄λ“œλ₯Ό 톡해 λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ—¬ νŒŒμΌμ„ νŽΈμ§‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이둜 인해 μ΄ˆκΈ°μ—λŠ” λ‹€μ†Œ λ³΅μž‘ν•΄ 보일 수 μžˆμœΌλ‚˜, μ΅μˆ™ν•΄μ§€λ©΄ λΉ λ₯΄κ³  효율적인 νŽΈμ§‘ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

vi의 μ£Όμš” νŠΉμ§•

  • viλŠ” λͺ¨λ“  λ¦¬λˆ…μŠ€ λ°°ν¬νŒμ— 기본적으둜 νƒ‘μž¬λ˜μ–΄ 있으며, λ”°λ‘œ μ„€μΉ˜ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
  • λͺ…λ Ή λͺ¨λ“œμ™€ νŽΈμ§‘ λͺ¨λ“œλ‘œ κ΅¬λΆ„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ ν‚€λ³΄λ“œ 단좕킀λ₯Ό 톡해 λΉ λ₯Έ νŽΈμ§‘ μž‘μ—…μ„ μ§€μ›ν•©λ‹ˆλ‹€.
  • λŒ€μš©λŸ‰ νŒŒμΌμ„ λΉ λ₯΄κ²Œ νŽΈμ§‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 배우고 μ‚¬μš©ν•˜κΈ°μ— λ‹€μ†Œ ν•™μŠ΅ λΉ„μš©μ΄ λ“œλ‚˜, μ΅μˆ™ν•΄μ§€λ©΄ λ‹€λ₯Έ νŽΈμ§‘κΈ°λ³΄λ‹€ 훨씬 효율적인 μž‘μ—…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

viλŠ” 일반적으둜 λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œ κ΄€λ¦¬μž, 개발자 및 μ„œλ²„ κ΄€λ¦¬μžλ“€μ—κ²Œ 많이 μ‚¬μš©λ˜λ©°, ν…μŠ€νŠΈ 파일의 생성, μˆ˜μ •, νŽΈμ§‘ λ“± λ‹€μ–‘ν•œ μž‘μ—…μ— 널리 ν™œμš©λ©λ‹ˆλ‹€. 이제 λ‹€μŒ μ„Ήμ…˜μ—μ„œλŠ” viλ₯Ό ν™˜κ²½μ„€μ •ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ λͺ…령어에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

2. vi ν™˜κ²½μ„€μ •μ„ μœ„ν•œ κΈ°λ³Έ λͺ…λ Ήμ–΄

viλ₯Ό μ‚¬μš©ν•˜κΈ° 전에 νŠΉμ •ν•œ 섀정을 λ³€κ²½ν•˜κ±°λ‚˜ μ‚¬μš©μž ν™˜κ²½μ— 맞게 μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ λͺ‡ 가지 κΈ°λ³Έ λͺ…λ Ήμ–΄λ₯Ό μ•Œμ•„λ΄…μ‹œλ‹€.

  1. vi 파일λͺ… - νŒŒμΌμ„ μ—΄ λ•Œ μ‚¬μš©ν•˜λŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€. 파일λͺ…에 ν•΄λ‹Ήν•˜λŠ” νŒŒμΌμ„ vi둜 μ—½λ‹ˆλ‹€.
  2. :set - ν˜„μž¬ vi의 μ„€μ • μƒνƒœλ₯Ό 확인할 수 μžˆλŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.
  3. :set [μ˜΅μ…˜] - vi의 μ„€μ • μ˜΅μ…˜μ„ λ³€κ²½ν•  수 μžˆλŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€. [μ˜΅μ…˜]μ—λŠ” λ‹€μ–‘ν•œ μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. (예: :set number은 쀄 번호λ₯Ό ν‘œμ‹œν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.)
  4. :syntax on - 문법 κ°•μ‘° κΈ°λŠ₯을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€. μ½”λ“œ νŒŒμΌμ„ νŽΈμ§‘ν•  λ•Œ ν•΄λ‹Ή μ–Έμ–΄μ˜ 문법을 κ°•μ‘°ν•˜μ—¬ 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€.
  5. :syntax off - 문법 κ°•μ‘° κΈ°λŠ₯을 λΉ„ν™œμ„±ν™”ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ κΈ°λ³Έ λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ vi의 섀정을 μ‘°μ •ν•΄ λ³΄κ±°λ‚˜, μ›ν•˜λŠ” 섀정을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. vi의 μ„€μ • νŒŒμΌμ— λŒ€ν•΄ μ•Œμ•„λ³΄κΈ° 전에 λ‹€μŒ μ„Ήμ…˜μ—μ„œλŠ” vi ν™˜κ²½μ„€μ • 파일의 μœ„μΉ˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

3. vi ν™˜κ²½μ„€μ • 파일의 μœ„μΉ˜

vi의 ν™˜κ²½μ„€μ •μ€ .vimrcλΌλŠ” νŒŒμΌμ— μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 νŒŒμΌμ€ μ‚¬μš©μžμ˜ ν™ˆ 디렉토리에 μœ„μΉ˜ν•˜λ©°, viκ°€ μ‹œμž‘λ  λ•Œ μžλ™μœΌλ‘œ μ½ν˜€μ§€λŠ” μ„€μ • νŒŒμΌμž…λ‹ˆλ‹€. μ‚¬μš©μžλ§ˆλ‹€ 각자 λ‹€λ₯Έ 섀정을 κ°€μ§ˆ 수 μžˆλ„λ‘ ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ©°, ν•„μš”ν•œ 섀정을 .vimrc νŒŒμΌμ— μΆ”κ°€ν•˜λ©΄ λ©λ‹ˆλ‹€.

.vimrcλŠ” μˆ¨κΉ€ 파일이기 λ•Œλ¬Έμ—, 일반적으둜 ls -a와 같은 λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 λͺ©λ‘μ„ 확인해야 ν•©λ‹ˆλ‹€. ν™ˆ λ””λ ‰ν† λ¦¬μ—μ„œ .vimrc 파일이 μ—†λŠ” 경우, μƒˆλ‘œμš΄ νŒŒμΌμ„ μƒμ„±ν•˜κ³  μ›ν•˜λŠ” 섀정을 μΆ”κ°€ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

vi의 ν™˜κ²½μ„€μ • νŒŒμΌμ„ νŽΈμ§‘ν•˜μ—¬ μ‚¬μš©μž ν™˜κ²½μ— 맞게 λ‹€μ–‘ν•œ 섀정을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이둜써 viλ₯Ό λ”μš± 효율적으둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이제 λ‹€μŒ μ„Ήμ…˜μ—μ„œλŠ” μ‹€μ œλ‘œ .vimrc νŒŒμΌμ„ νŽΈμ§‘ν•΄λ³΄λŠ” 방법과 μ£Όμš” μ„€μ • μ˜΅μ…˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

4. λŒ€ν‘œμ μΈ vi ν™˜κ²½μ„€μ • μ˜΅μ…˜

vi의 ν™˜κ²½μ„€μ • 파일인 .vimrcμ—μ„œλŠ” λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ μ§€μ •ν•˜μ—¬ vi의 λ™μž‘μ„ λ³€κ²½ν•˜κ³  편의 κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” λŒ€ν‘œμ μΈ λͺ‡ 가지 μ˜΅μ…˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. syntax on: 문법 κ°•μ‘° κΈ°λŠ₯을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€. μ½”λ“œ νŒŒμΌμ„ νŽΈμ§‘ν•  λ•Œ ν•΄λ‹Ή μ–Έμ–΄μ˜ 문법을 κ°•μ‘°ν•˜μ—¬ 가독성을 λ†’μ—¬μ€λ‹ˆλ‹€.

  2. number: 쀄 번호λ₯Ό ν‘œμ‹œν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€. νŽΈμ§‘ 쀑인 νŒŒμΌμ—μ„œ ν•΄λ‹Ή μ€„μ˜ 번호λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

  3. tabstop: νƒ­ λ¬Έμžκ°€ μ°¨μ§€ν•˜λŠ” 슀페이슀의 개수λ₯Ό μ§€μ •ν•˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€. κΈ°λ³Έμ μœΌλ‘œλŠ” 8μž…λ‹ˆλ‹€.

  4. autoindent: μžλ™ λ“€μ—¬μ“°κΈ° κΈ°λŠ₯을 μ‚¬μš©ν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€. μƒˆλ‘œμš΄ 쀄을 μΆ”κ°€ν•  λ•Œ, 이전 μ€„μ˜ λ“€μ—¬μ“°κΈ° μˆ˜μ€€μ„ μœ μ§€ν•©λ‹ˆλ‹€.

  5. ic: 검색 μ‹œ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜μ§€ μ•Šλ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€. 검색 μ‹œ λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, foo둜 κ²€μƒ‰ν•˜λ˜μ§€ FOO둜 κ²€μƒ‰ν•˜λ˜μ§€ λͺ¨λ‘ fooλΌλŠ” 단어λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

  6. hlsearch: 검색 κ²°κ³Όλ₯Ό ν•˜μ΄λΌμ΄νŠΈν•˜μ—¬ ν‘œμ‹œν•˜λŠ” μ˜΅μ…˜μž…λ‹ˆλ‹€. 검색 μ‹œ ν•΄λ‹Ή 단어가 찾아진 뢀뢄이 κ°•μ‘° ν‘œμ‹œλ©λ‹ˆλ‹€.

.vimrc νŒŒμΌμ—λŠ” 이 외에도 λ§Žμ€ λ‹€λ₯Έ μ˜΅μ…˜μ΄ 있으며, μžμ„Έν•œ λ‚΄μš©μ€ vi의 곡식 λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ .vimrc νŒŒμΌμ—μ„œ μ›ν•˜λŠ” μ˜΅μ…˜μ„ μ„€μ •ν•˜κ³  μ €μž₯ν•œ ν›„ viλ₯Ό μ‹€ν–‰ν•˜λ©΄, μ„€μ •ν•œ μ˜΅μ…˜μ΄ μ μš©λ©λ‹ˆλ‹€.

5. vi ν™˜κ²½μ„€μ •μ„ μœ„ν•œ μΆ”κ°€ 팁

vi의 ν™˜κ²½μ„€μ •μ„ λ”μš± μœ μ—°ν•˜κ²Œ ν•  수 μžˆλŠ” λͺ‡ 가지 νŒμ„ μ†Œκ°œν•©λ‹ˆλ‹€.

  1. 주석: .vimrc νŒŒμΌμ—μ„œ 주석을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 주석은 " 문자둜 μ‹œμž‘ν•˜λ©°, ν•΄λ‹Ή μ€„μ˜ λκΉŒμ§€ μ£Όμ„μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€. 주석을 μΆ”κ°€ν•˜μ—¬ μ„€μ •μ˜ μ˜λ„μ™€ μ„€λͺ…을 기둝할 수 μžˆμŠ΅λ‹ˆλ‹€.

  2. μ™ΈλΆ€ 슀크립트 μ‹€ν–‰: .vimrc νŒŒμΌμ—μ„œλŠ” μ™ΈλΆ€ 슀크립트λ₯Ό μ‹€ν–‰ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŠΉμ •ν•œ 섀정이 ν•„μš”ν•œ 경우 ν•΄λ‹Ή 섀정을 μžλ™μœΌλ‘œ μˆ˜ν–‰ν•˜λŠ” 슀크립트λ₯Ό μž‘μ„±ν•˜κ³ , .vimrcμ—μ„œ ν•΄λ‹Ή 슀크립트λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  3. ν”ŒλŸ¬κ·ΈμΈ 관리: viμ—λŠ” λ‹€μ–‘ν•œ ν”ŒλŸ¬κ·ΈμΈμ΄ μ œκ³΅λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜λ©΄ vi의 κΈ°λŠ₯을 ν™•μž₯ν•˜κ³  νŽΈμ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. ν”ŒλŸ¬κ·ΈμΈ κ΄€λ¦¬μžλ₯Ό μ‚¬μš©ν•˜λ©΄ ν”ŒλŸ¬κ·ΈμΈμ„ μ‰½κ²Œ μ„€μΉ˜ν•˜κ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

  4. 맀크둜: viμ—λŠ” 맀크둜 κΈ°λŠ₯이 λ‚΄μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 맀크둜λ₯Ό μ‚¬μš©ν•˜λ©΄ 반볡적인 μž‘μ—…μ„ μžλ™ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 맀크둜λ₯Ό λ…Ήν™”ν•˜μ—¬ κΈ°λ‘ν•œ ν›„μ—λŠ” ν•΄λ‹Ή 맀크둜λ₯Ό μ›ν•˜λŠ” 만큼 μž¬μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

.vimrc νŒŒμΌμ„ μˆ˜μ •ν•˜κ³  μ €μž₯ν•œ ν›„μ—λŠ” μƒˆλ‘œμš΄ 섀정이 적용되기 μœ„ν•΄ viλ₯Ό λ‹€μ‹œ μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ„€μ • λ³€κ²½ ν›„μ—λŠ” λ³€κ²½ 사항이 μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•˜κ³ , ν•„μš”μ— 따라 좔가적인 섀정을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€