vi와 vim

  • vi
    • visual editor
    • UNIX, Linux에서 가장 많이 사용하는 에디터
  • vim
    • vi improved
    • Windows, Mac 지원

vim 설치

  • Ubuntu와 같은 Debian 계열
$ sudo apt -y install vim

vim 시작

vim 파일명

  • 특정 파일 열기
$ vim mytext.txt # mytext.txt 파일이 없으면 새로 생성된다.
  • 파일명 = - 일 때는 stdin
$ find . -name "*txt" | vim - # find 명령어의 출력을 vim으로 연다.

vim의 mode

vi의 기본 모드 3가지

  • 일반 모드, normal mode
    • 수정 불가, 단축키 사용
  • 입력 모드, insert mode
    • 내용 수정
  • 명령 모드, command-line mode
    • 파일 저장 등 복잡한 명령어 입력

      vim이 갖는 추가 모드

    • 비주얼 모드, visual mode

      • 마우스를 대신하는 드래그 모드

vim 모드 이동

  • 처음 실행normal mode
  • normal mode + a, i, oinsert mode
    • insert mode + ESCnormal mode
  • normal mode + :command-line mode
    • command-line mode + ESC or 실행normal mode

normal

  • Text-based에는 GUI가 없기 때문에

insert

  • a현재 커서 위치에서 한 칸 뒤로 이동 후 입력 모드 전환
  • A현재 행의 끝으로 이동 후 입력 모드 전환
  • i현재 커서 위치에서 입력 모드 전환
  • I현재 행의 맨 앞으로 이동 후 입력 모드 전환
  • o현재 행 아래 새로운 행을 만든 후 입력 모드 전환
  • O현재 행 위에 새로운 행을 만든 후 입력 모드 전환
  • R → 수정 모드로, 모든 글자 덧쓰여짐

command-line

  • force 명령 → !

vim 조작

vim 커서 이동

  • normal mode에서, h, j, k ,l로 커서를 이동할 수 있다.

  • 앞에 숫자를 붙이면 그만큼 이동할 수 있다.
    • 3h → 왼쪽 3칸 이동
    • 3k → 아래 3줄 이동
  • ^ → 행 맨 앞으로 이동
  • $ → 행 맨 끝으로 이동
  • Ctrl + BPage up, 위로 한 화면 스크롤
    • Ctrl + U → 위로 반 화면 스크롤
  • Ctrl + FPage down아래로 한 화면 스크롤
    • Ctrl + D → 아래로 반 화면 스크롤
  • #gg#행으로 이동, # 없으면 1
  • #G#행으로 이동, # 없으면 마지막
  • :##행으로 이동

vi 삭제

  • vi에서 삭제 == 임시 버퍼에 잘라내기 (복사 기능도 한다는 뜻)
    • x → 커서에 위치한 문자 삭제, Delete와 같음
    • dd, :d → 현재 행 삭제
    • D → 현재 컬럼 위치에서 행 끝까지 삭제 (=d$)
    • J → 아래 행을 현재 행의 끝에 붙힘 (아래 행의 공백은 제거)
      • 행 끝에서 x 아무리 눌러도 다음 줄 딸려오지 않음

vi 복사

  • 삭제 없이 복사만 하고 싶을 때
    • yy, :y, Y → 현재 행 복사(yank)

vi 붙여 넣기

  • p → 현재 행에 붙여 넣기
  • :pu → 개행 문자가 포함된 경우, 현재 행의 아래에 붙여 넣기
  • P → 현재 행의 위쪽에 붙여 넣기

undo & redo

  • u → undo, 명령 취소
  • Ctrl + R → redo, 취소한 명령 다시 실행
  • . → 이전 명령어 반복

cmd : range

  • command-line mode에서 범위를 지정해서 명령
    • :#d#번 행 삭제
    • :#1~#2d#1~#2번 행 삭제
    • %, l, $ → 전체
    • . → 현재 행
    • :-#1,+#2d → 현재 행에서 위로 #1행, 아래로 #2행 삭제

visual mode

  • 마우스의 드래그 기능
    • v → 일반 비주얼 모드, 현재 커서 위치에서 블록 지정
    • V → visual line mode, 현재 커서 위치에서 행 단위로 블록 지정
    • Ctrl + V → visual block mode, 열 단위로 블록 지정
      • Ctrl + Q로도 사용

        column editing

      • 한 번에 모든 열을 수정할 수 있다

        1304, Yona Yahav, M, 42, MP1
        1294, Kebin Robinson, M, 41, CP1
        1314, TW Yoon, M, 34, CP1
        1315, Rina Suzuki, F, 36, MP1
        1601, Steven Choi, M, 34, CP3
        1600, 로버트 김, M, 32, CP3
        1297, Rarry Robinson, M, 38, CP2
      • ggCtrl+VGI0000ESC*2

        00001304, Yona Yahav, M, 42, MP1
        00001294, Kebin Robinson, M, 41, CP1
        00001314, TW Yoon, M, 34, CP1
        00001315, Rina Suzuki, F, 36, MP1
        00001601, Steven Choi, M, 34, CP3
        00001600, 로버트 김, M, 32, CP3
        00001297, Rarry Robinson, M, 38, CP2
      • 모든 열에 0000이 추가됨

    • o → 블록의 시작을 이동할 수 있다.

vim 클립보드

vimx

  • clipboard 기능이 포함된 vim

vimx 설치

$ sudo apt -y install vim-gnome # ubuntu와 같은 Debian 계열의 명령어

X window와 클립보드 공유

  • vim --version을 실행해서,
$ vim --version | grep clipboard
+clipboard         +jumplist          +persistent_undo   +virtualedit
-ebcdic            +mouseshape        +statusline        +xterm_clipboard

clipboard, xterm_clipboard+인지 확인

  • 시스템 클립보드를 기본값으로 사용하기
$ vim ~/.vimrc

set clipboard=unnamedplus 입력 후 저장 (:wq)

set 명령어

  • :set → 현재 명령어 옵션 확인
  • :set all → 모든 명령어 옵션 확인
  • :set [no]namename 명령어 실행, noname으로 취소
    • nu → 화면에 행 번호 표시
    • rnu → 현재 행 기준 상하 상대적 행 번호 표시
    • ai → 자동 들여 쓰기
    • cindentC언어 스타일 들여쓰기
    • ts=valuetab 크기를 value로 설정
    • sw=value → 자동 블록 이동 시 value만큼 이동

set명령어는 normal mode에서 사용 가능하고, .vimrc로 설정할 수 있다.

테마 변경

  • :colorscheme [Tab]으로 옵션 선택
  • 맘에 드는 테마 사용하자

메뉴얼

help

  • :help ##단어가 포함된 명령어를 보여 준다
    • Ctrl+] → 선택한 단어가 링크된 곳으로 이동
    • Ctrl+T → 이전으로 이동

vim의 error

경우 1. 파일의 중복 오픈

  • O 혹은 Q 선택

경우 2. vim crash로 swapfile이 제거되지 못한 경우

  • R 이후 D

검색

find

  • fc → c를 전방 검색
  • Fc → c를 후방 검색
  • ; → 최근 검색을 재검색
  • , → 최근 검색을 반대 방향으로 재검색

단어 검색

  • /string → string을 전방 검색

  • ?string → string을 후방 검색

  • * → 현재 커서에 위치한 단어 전방 검색

  • # → 현재 커서에 위치한 단어 후방 검색

  • n → 다음 탐색 결과

  • Nn과 반대 방향 탐색 결과

  • % → 괄호 짝 찾아줌

  • /\c → 대소문자 구별 x

    • :set ignorecase로 기본 설정할 수도 있다.
  • /[a-g]re → a~g 중 하나 + re가 조합된 단어 검색

    • ex) are, parents…
  • \M → magic 해석을 금지

    • ex) /[section]은 정규식이라 그냥 검색이 안 된다.
      /\M [section]으로 검색은 가능

교체

  • sed의 기능이 import된 것
    • :[range]s/<찾는 문자열>/<교체할 문자열>/<옵션>
      - 옵션
      - g → 검색된 문자열 모두 교체
      - i → 대소문자 무시
      - c → 교체마다 [y/n] 표시
      - e → 에러 무시

      /가 너무 많이 들어갈 때 separator,로 바꿔서 표현할 수 있다.

      $ :%s//home/linuxer//home/unixer/g
      $ :%s/\/home\/linuxer/\/home\/unixer/g
      $ :%s,/home/linuxer,/home/unixer,g
      # 모두 같은 명령어.

파일 관련 기능

  • buffer → 파일을 편집하기 위한 임시 공간
    • :w로 저장하기 전 까지는 buffer
  • register → 텍스트 일부를 저장
    • 복사할 때 텍스트가 저장되는 곳

파일 오픈

  • :e filename → filename을 편집 모드로 오픈
  • :e #count → count번째 파일 오픈
  • :e <path>→ 에 있는 파일 목록 열람
  • :find filename → filename에 해당하는 파일을 찾아 오픈
  • Ctrl+6:e의 단축키

파일 종료

  • :q[!] → 종료, [!]는 강제 종료
  • :qa[!] → 모든 파일 종료
  • :wq → 저장하고 종료
  • :wqa → 모든 파일 저장하고 종료

파일 저장

  • :w filename → filename에 파일 저장
  • :sav filename → 현재 파일을 다른 이름으로 저장
  • :up → 변경된 점이 있는 경우, :w
  • :xZZ와 함께 :w 최신 버전

복수의 파일 다루기

수평 분할

  • Ctrl+w s or :sp filename → 여러 파일을 수평 분할

수직 분할

  • Ctrl+w v or :vp filename → 여러 파일을 수직 분할

창 이동 관련

  • Ctrl+w 방향키
  • Ctrl+w Ctrl+w or Ctrl+w w → 오른쪽으로 이동
  • Ctrl+w Ctrl+p or Ctrl+w p → 바로 이전 창으로 이동

창 크기 관련

  • Ctrl+w = → 모든 창 크기 동일하게
  • Ctrl+w [#]+#만큼 크기 키우기
  • Ctrl+w [#]-#만큼 크기 줄이기

diff

$ vim -d file1 file2
  • file1file2에서 다른 부분을 표시해 준다
  • 소스 코드 비교, 설정 파일 볼 때 많이 사용

tabpage

  • [#]tabe[dit] file#번째 탭에 파일 열기
  • [#]tabnew file#번째 위치에 빈 탭 만들기
  • [#]tabc[lose]#번째 탭 닫기
  • [#]gt, [#]Ctrl+PageDown → 다음 탭(#번째 탭)으로 이동
  • [#]gT, [#]Ctrl+PageUp → 이전 탭(#번째 탭)으로 이동
  • :tabm[ove] [#]#번째 탭으로 이동 (default 오른쪽)

buffer

  • :files로 현재 buffer 목록을 출력할 수 있다.
    • gf → 커서 아래 파일로 이동
    • Ctrl+w f → 커서 위치 파일을 분할된 창에 오픈
    • Ctrl+w g → 커서 위치 파일을 탭에 오픈
    • Ctrl+6 → 이전 파일로 돌아가기
  • C언어 파일의 #include 헤더파일도 들어갈 수 있다.

파일 인코딩

  • fencs
$ set fencs=ucs-bom,utf-8,korea,latinl
# BOM확인 후, UTF-8, korea 체크(euc-kr), ASCII 확인
  • :help encoding-values더 확인해 보자

~/.vimrc 설정

$ vim ~/.vimrc
set fencs=ucs-bom,utf-8,korea,latinl

Linux 텍스트 파일을 Windows로 가져갈 때

  • UTF-8을 지원하지 않는 에디터라면
:set ff=dos
:set fens=korea
:wq # 아니면 [:sav 새로운이름.txt] 로 저장
  • 반대 경우
# fencs가 제대로 설정되었다면 자동 변환 가능
:set ff=unix
:set fenc=utf8
:wq # 아니면 [:sav 새로운이름.txt] 로 저장

기타 편리한 기능

  • 0 → 0번째 열
  • ^ → 공백이 아닌 첫 번째 열
  • $ → 마지막 열
  • w, u → 단어 경계로 이동
    • b → 반대 방향

예약어

  • ca
    • command-line mode에서 사용 가능

      ab 내멜 036ab@naver.com # [내멜]을 치면 자동으로 [036ab@naver.com]이 타이핑됨
    • 한글 상태 오타를 변환할 수도 있다.

  • ia
    • insert mode에서 사용 가능

      ia 시간0 <C-R>=strftime("%Y.%M.%d=%H:%M:%S)<C-R>

단축키

  • nmap <단축키> <명령>normal mode에서 단축키를 누르면 명령을 실행
  • imap <단축키> <명령>insert mode에서 단축키를 누르면 명령을 실행
  • cmap <단축키> <명령>command-line mode에서 단축키를 누르면 명령을 실행
  • vmap <단축키> <명령>visual mode에서 단축키를 누르면 명령을 실행

autocmd

  • 특정 상황에서 자동으로 실행하는 명령
autocmd BufRead, BufNewFile *.txt colo evening
# Buffer가 읽기 or 새 파일 만들었을 때, .txt확장자, evening 테마로 실행하라.

들여쓰기

  • 전체 문서 들여쓰기
    • gg=G
  • 일부만 들여쓰기
    • visualmode +=
  • 기존에 작성된 탭 문자를 공백 4칸으로 전환하고 싶다.
:set et ts=4
:ret # retab을 사용해도 된다.
  • 반대로, 공백 4칸을 탭 문자로 변환하려면
:set noet ts=4
:ret!

자동 완성

  • Ctrl + n → 쓰던 단어와 비슷한 단어를 전방 탐색 후 제공

  • Ctrl + pCtrl + n과 반대 방향

  • 자동으로 vimrc를 만들어 주는 곳

    • vim-bootstrap.com
    • 여기서 약간 수정해 사용하는 사람이 많다.
profile
올해로 26세

0개의 댓글