본문으로 이동

A2호스팅 자체 업데이트 기능이 활성화되어 미디어위키 엔진이 1 45오 올랐습니다 호환성 확보를 위한 안정화를 끝낼 예정이니 양해해주셨으먄 좋겠습니다..

  1. 큰숲백과:청사진에서 위키 발전의 대략적인 방향성을 제시했습니다. 의견이 있으신 분은 큰숲백과토론:청사진에서 의견을 남겨주시면 좋겠습니다.
  2. 기능상의 오류로 지원하지 않고 있는 기능에 대해서는 큰숲백과토론:이슈 트래커에 요약했습니다. 참고하시기 바랍니다.
  3. 데이터베이스 덤프 받고싶으신 분은 큰숲백과 가입 후에 사용자토론:Bigforest에 의견 남겨주시면 ftp 주소, 계정, 비밀번호를 특수:EmailUser를 통해서 공개할 예정입니다.

작은숲:위키노트/Vi 팁

큰숲백과, 나무를 보지 말고 큰 숲을 보라.

Copy&Paste 할 때 들여쓰기 금지

[원본 편집]

마우스로 붙여넣기를 할 때 autoindent 나 textwidth 등이 작동해 버려서 원하지 않는 들여쓰기가 되는 것을 막으려면:

set paste

한 후에 붙여넣기를 하고

set nopaste

를 하여 계속 작업하면 된다.

set pastetoggle=<Ins>

이렇게 설정하면, Ins를 누를 때마다 pastenopaste 상태가 전환된다. (명령 모드, 입력 모드 둘 다에서 사용 가능하다.)

Folding 기능 사용

[원본 편집]

들여쓰기를 기준으로 접을 경우.

set foldmethod=indent
  • zi – 접는기능 사용 토글
  • zv – 커서 줄 보기
  • zo – 부분 펴기 (혹은 화살표키)
  • zc – 부분 접기
  • zM – 모두 접기
  • zR – 모두 펴기

창 나누기

[원본 편집]
  • :sp <file name> – 가로로 나뉜 창 열기. <file name>이 없을 경우 새 파일을 여는 것과 동일하다.
  • :vs – 세로로 나뉜 창 열기
  • ^ww – 창 사이 이동.
  • ^wt, ^wb – 열린 창의 Top과 Bottom으로의 이동.
  • ^wj, ^wk – 창의 위, 아래로 이동할 수 있게 합니다.
  • ^wc – 활성 창을 닫는다.
  • ^w_ – 활성 창을 최대화한다.
  • 20^w_ – 활성 창의 높이를 20줄로 한다.
  • ^w+ – 활성 창의 높이를 한줄 늘인다.
  • ^w- – 활성 창의 높이를 한줄 줄인다.
  • ^w= – 모든 창을 같은 크기로.
  • :res15 – 활성 창의 크기를 15로.

한 파일의 일부분을 다른 파일로 복사하기

[원본 편집]
  • "f4yy – 현재 줄부터 4 줄을 'f'라는 이름의 버퍼에 복사한다.
  • :w – 편집 중인 파일을 저장한다.
  • :enewfile 새로운 파일을 로드한다.
  • "fp – 새로운 파일의 현재 줄 위치에 'f'라는 이름으로 저장해 두었던 내용을 복사한다.

vi가 기억하는 두 가지 파일명(%, #)

[원본 편집]

vi 에디터에서 파일 편집을 할때 사용하는 두가지 ex 명령이 있다. 다음의 예를 보자.

:e file1 file2

위의 명령을 실행하면 file1을 편집하고 있는 상태가 되게 된다. 이 상태에서 :n 을 입력하면 file2를 편집하게 된다. 이때 다음을 입력해보자.

:e#

이 명령을 입력하면 VI는 다시 file1을 편집하게 되고, 이때 다시 :e#를 입력하면 file2를 편집하게 된다. 만약 이때 또 다시 :e#를 입력하게 되면 file1을 편집하게 된다. 즉 #의 뜻은 '선택적인 다른 하나의 파일'을 뜻하게 된다는 것이다. 또한 %의 뜻을 알아보자. %는 현재의 파일명을 뜻할 수 있다. 다음을 입력해보자.

:w %.new

이 명령을 현재 편집중인 파일을 그 파일에 .new 를 더한 이름으로 파일을 다시 저장하게 된다. 즉 위의 명령을 입력할 때 편집 중이던 파일명이 filename 이었다면 위의 명령으로 저장되는 파일은 filename.new 라는 파일이 된다.

찾기 패턴과 글로벌 명령

[원본 편집]

찾기 패턴

[원본 편집]
  • :/pattern/dpattern을 포함한 다음 줄을 삭제.
  • :/pattern/+dpattern을 포함한 줄의 그 다음 줄을 삭제. (+d 대신 +1을 사용할 수도 있다.)
  • :/pattern1/,/pattern2/dpattern1을 찾은 곳부터 pattern2가 있는 위치까지를 삭제.
  • :.,/pattern/m23 현재 줄부터 pattern이 있는 곳까지를 23 줄 다음으로 옮긴다.

위에서 주의할 점이 있다. 즉 vi 명령과 ex 명령에서 약간 다르게 작동되는 면이 있다는 것이다. 즉 d/while:.,/while/d 가 틀리게 작동된다는 것이데 전자는 while이 있는 곳 전 줄까지 삭제되고 후자는 while이 발생된 줄까지 삭제가 된다.

글로벌 명령

[원본 편집]
  • :g/pattern/ – 파일에서 pattern이 찾아지는 마지막 위치로 이동.
  • :g/pattern/p – 파일에서 pattern을 찾아 화면에 출력해준다.
  • :g!/pattern/nu – 파일에서 pattern이 없는 줄을 찾아 줄 번호를 출력해 준다. 이것을 이용해 pattern이 나타나는 횟수를 카운팅 할 수 있다.
  • :60,124g/pattern/p – 60에서 124 줄까지 pattern을 찾아 출력해준다.

또한 글로벌 명령은 다음과 같이 대치 명령과 같이 쓰일수 있다.

:g/^WARNING:/s/\<not\>/NOT/

위의 명령은 줄의 처음에 WARNING: 으로 시작하는 줄을 찾아서 그 줄에 하나의 단어(양쪽에 공백으로 존재하거나 양쪽에 TAB이나 newline등이 있는)로 존재하는 not이 있을 경우에 이것을 NOT으로 교체하라는 명령이다.

파일의 일부분만 저장

[원본 편집]
  • :230,$w newfile – 230 줄부터 끝까지 newfile로 저장.
  • :.,600w newfile – 현재 줄부터 600 줄까지 newfile로 저장

패턴명령을 통해 블럭을 옮기기

[원본 편집]
:g/SYNTAX/,/DESCRIPTION/-1 mo /PARAMETERS/-1

위 명령은 SYNTAX가 처음 발견되는 위치부터 DESCRIPTION이 발견되는 위치의 바로 전 줄까지를 PARAMETERS가 발견되는 바로 전 줄으로 옮긴다는 뜻이다.

위치 지정해 놓기

[원본 편집]
  • mx – 현재의 위치를 x라고 지정해 놓는다.(x 는 숫자이면 안된다.)
  • 'xx로 지정한 위치의 줄으로 현재의 위치를 옮긴다.
  • `xx로 지정한 위치의 줄, 열로 현재의 위치를 옮긴다.
  • ` ` – 위치를 옮긴 후에 바로 전에 지정한 위치나 context의 정확한 위치로 돌아간다.
  • '' - 바로 전에 지정한 위치나 context 줄의 시작으로 돌아간다.

텍스트를 유닉스 명령으로 필터링하기

[원본 편집]

편집중인 내용을 유닉스 명령으로 필터링할 수 있다. 예를 들어 1 줄부터 10 줄까지를 유닉스 명령인 sort를 통해 정렬할 수도 있고 특정 블럭을 특정 사람에게 메일로 보낼 수도 있다. 다음과 같은 형식으로 사용된다.

  • :1,99!sort – 1 줄부터 99 줄까지를 유닉스의 sort 명령에게 보내 글 결과 값으로 대치한다.
  • !)command – 전체 줄을 command에게 보내 그 결과 값으로 대치한다.
  • !!command – 현재 줄을 command에게 보내고 그 결과 값으로 대치한다.
  • 4!!command – 현재 줄부터 4 줄을 command에게 보내 글 결과로 대치한다.

단축키 사용

[원본 편집]
  • :ab abbr phraseabbrphrase에 대한 단축키로 사용.
  • :unab abbrabbr에 대한 단축키 설정을 해제.

명령으로 단축키 사용

[원본 편집]
:ab aW w! /tmp/fly.tmp.a
:ab aR r /tmp/fly.tmp.a
:ab bW w! /tmp/fly.temp.b
:ab bR r /tmp/fly.temp.b

위처럼 설정을 해 놓은 다음에

:.,+45 aW

이렇게 명령을 내리면 현재 줄부터 45 줄까지를 /tmp/fly.tmp.a 파일로 저장하게 되는 것이다.

복사 삭제 및 줄 모드, 문자 모드 명령

[원본 편집]
  • yy – 1 줄 버퍼에 저장.
  • "fyy – 1 줄을 버퍼 f에 저장.
  • dd – 1 줄 삭제 (삭제된 내용은 버퍼에 저장됨)
  • 2dd – 2 줄 삭제 (삭제된 내용은 버퍼에 저장)
  • d$ – 현 위치부터 그 줄의 끝까지 삭제. 이때 $의 위치에는 문자 모드의 명령들이 모두 쓰일 수 있음. 예를 들어, d^, dfa, dG 등등.
  • ddp – 현재 줄을 삭제하고 삭제되어 버퍼에 저장된 내용을 현재 줄의 다음 줄에 복사(즉, 현재 줄과 다음 줄을 바꿈)
  • Dd$와 같은 뜻
  • Cc$와 같은 뜻 (현재 위치부터 줄의 끝까지 수정)
  • Yyy와 같은 뜻
  • d'a – 현재 줄부터 a로 지정해 놓은 위치의 줄까지 삭제
  • d`a – 현재 줄부터 a로 지정해 놓은 위치의 줄, 컬럼까지 삭제.
  • c/pattern/ – 현재 줄부터 pattern이 나오는 위치까지의 모든 문자를 수정 (줄모드가 아님)
  • c?pattern?pattern을 포함
  • <G – 현재 줄부터 편집 중인 파일의 끝까지 indent 삭제(dedent)

임시 영역이 꽉찰 경우 응급 조치

[원본 편집]

임시 영역이 넘쳐서 vi 에디터가 제대로 작동하지 않는 경우가 있다. 이때는 임시 영역의 위치를 바꾸어 주면 정상적으로 편집 작업을 할 수 있다. set 명령으로(셸에서) directory 변수의 위치를 바꾸어 이 일을 할 수 있다.

$ set directory=/usr/fly/vitemp

만약 위의 명령을 vi 내에서 하길 원한다면 위의 명령을 vi에서 사용한 후에 :e command를 사용하면 편집 중이 모든 파일의 임시 디렉토리가 바뀌어질 것이다. 또한 EXINIT 환경 변수의 값을 바꾸어 이 일을 할 수도 있다.

setenv EXINIT 'set directory=/usr/fly/vitemp'

map을 이용해 타이핑을 줄이자

[원본 편집]

map 명령은 명령 모드에서의 map 명령과 입력 모드에서의 map 명령의 두 가지가 있다.

명령모드 map

[원본 편집]
  • map x sequencexsequence로 지정
  • unmap xx를 unmap
  • map – 현재 map된 문자들을 보여준다.

위의 map 명령을 .exrc 파일에 넣어 두면 차후에 편하게 쓸 수가 있다. 위의 명령중에 x 부분에 해당하는 키는 명령 모드에서 사용되지 않는 것을 선택하여 정의하여야 하며 이에 해당하는 것에는 다음과 같은 문자셋이 있다.

  • 문자: q K V v
  • 제어문자: ^A ^K ^O ^T ^W ^X
  • 기호: _ * \ =

위에서 =는 VI가 lisp 모드일 경우에 사용되므로 이때는 사용해서는 안된다. 기본적인 사용예는 다음과 같이 사용될 수 있다.

map v dwwP

이와 같이 정의해 두거나 ex 모드(:상태)에서 위의 명령을 입력하면 v 키를 입력함으로써 dwwP에 해당하는 명령이 실행된다. 즉 v 키는 현재 워드를 삭제(dw)하고 그 삭제된 워드를 현재 워드의 다음 워드에 복사하게 된다.(즉 현재 워드와 다음 워드의 자리 바꿈) 또한 한 문자의 정의 뿐만 아니라 두 글자 이상으로 map을 정의 할 수도 있다. 다음의 예를 보자.

map *s Ea'^[Bi'^[
map *d Ea"^[Bi"^[

위의 명령은 *s 키를 입력하여 Ea'^[Bi'^[에 해당하는 명령을 실행하게 된다. 여기서 ^[가 의미하는 실제 여러분이 입력해야 할 키는 Ctrl-V를 누른 다음 ESC 키를 누른 것을 의미한다. 위의 명령을 설명하자면 다음과 같다.

  • Ea'^[Bi'^[ – 현재 단어의 앞 뒤로 '를 삽입하는 명령
  • Ea"^[Bi"^[ – 현재 단어의 앞 뒤로 "를 삽입하는 명령

또한 Function 키를 등록할 수도 있다. 예를 들어 F1 키를 한 단어 삭제로 사용할 수도 있다.

map #1 dw

입력모드 map

[원본 편집]

입력 모드에서의 map은 명령 모드의 맵이 map 명령으로 이루어지는데 반해 map!이 사용된다는 차이가 있다. 입력 모드에서의 map은 다음과 같은 형식으로 사용될 수 있다.

:map! ^ ^[OCRAZYFLY:^[jA

위의 명령은 입력 모드에서 ^(caret)를 입력하면 ESC를 누른 다음 현재 줄의 윗쪽에 한 줄을 삽입(O)하고 그 위치에 CRAZYFLY:라고 입력한 후에 ESC를 누르고 그 다음 줄으로 옮기고(j) 그 행의 맨 뒤에 입력을 계속 한다라는 의미이다.

입력 모드에서 방향키를 사용하자

[원본 편집]

DOS 사용자를 위해 명령 모드와 입력 모드의 전환을 편리하게 하기 위해 입력 모드에서 방향키(up, down, left, right)를 누르면 그에 해당하는 행동을 하게 해주는 것을 map 명령을 통해 할 수 있다. 물론 위의 키들이 다음의 코드를 나타낸다는 것을 알아야 할 것이다.

키 코드 vi 코드
up ^[[A ^[ka
down ^[[B ^[ja
left ^[[D ^[hi
right ^[[C ^[la

이를 map 명령으로 나타내면 각각 다음과 같다.

map! ^[[A ^[ka
map! ^[[B ^[ja
map! ^[[D ^[hi
map! ^[[C ^[la

다른 명령들

[원본 편집]
  • :! cmd – 에디터 안에서 셸 명령을 수행하고자 할 때
  • :sh – 셸로 잠시 나가기, 돌아올 때는 exit
  • ~ – (tilde or 'wavy'), 대문자를 소문자로 소문자를 대문자로 교환
  • % – 한 줄 안에서 (, ), {, }, [, ]를 검색
  • mx – 문자 x에 현재 위치를 표시
  • d'x – 문자 x에 표시된 위치부터 현재 커서 위치까지 삭제
  • ^V – 제어 문자를 입력할 수 있도록 함 (e.g., ^L)
  • ?stringstring 패턴을 현재 위치의 앞에서 찾기
  • :n,m w filen 줄에서 m 줄까지 내용을 file이라는 이름으로 저장. (e.g., 15,25 w file)
  • J – JOINS, 커서가 있는 줄과 다음 줄을 합치기.
  • :set ai – 에디터가 자동적으로 들여쓰기 탭(insert tabs)을 삽입.
  • :set list – 특수 문자(special characters)를 보여줌. (i.e., non-printable characters)
  • :set ts=n – 탭 입력을 공백 몇 자로 표현할 것인지 설정.
  • :set nu – 줄번호를 나타나게 함.

같이 보기

[원본 편집]

참고 자료

[원본 편집]
이 작은숲 문서의 출처는 위키노트의 위키노트/Vi 팁 문서입니다.