• encoding
  • 편리한 기능들

 

I. 파일 인코딩

  • encoding(character set)
  • Unicode와 완성형 한글

 

##1. FileEncodings(fencs)

#1.  파일을 읽을 때  확인할 encoding list를 미리 설정, 해당 리스트들을 순서대로 확인하면서 파일 내용에 변환이 필요 시 그 변환 기능을 지원한다.

==> .vimrc에 설정해야 multi-bytes 기반 인코딩 파일을 읽을 수 있다. 

**multi -bytes 기반 인코딩 파일은 CJK 의미. (영문 아닌 Multi bytes 기반 인코딩파일을 사용하는 국가, China, Japan, Korea) 

 

#2. 설정방식

set fencs=value  

예제
set fencs=ucs-bom,utf-8,korea,latin-1
==> BOM 확인 후, UTF-8, korea 체크(euc-kr, cp949), 마지막은 ASCII


set fencs=ucs-bom,utf-8,japan,korea,latin-1
==> UCS에서 BOM 확인후 ,없으면 UTF-8 체크 , 없으면 japan 체크(euc-kr, cp942) , 없으면 마지막엔 ASCII로 읽어들임

순서대로 진행해야함. 순서 다르면 제대로 작동안될 수 있음

#3  BOM (Byte Order Mark)

1) UCS(Universal coded Character Set)의 판별 마크 (생략 가능)

ucs-bom은 관습적으로 적는게 낫다. ( ucs-bom : UCS에서 BOM을 찾으라는 의미이다.)

 

#4 fenc, fencs에 사용 가능한 문자 세트

:help encoding-values  도움말 참조

인코딩 형식 설명
utf-8, utf8 UTF-8 유니코드 형식
ucs-bom BOM 마크에 의한 유니코드 형식
korea 한글 지원[별칭]

-유닉스에서는 euc-kr, 윈도에서는 cp949 로 자동변환
vim이 유닉스계열과 윈도 계열이 다르기에 korea 라는 별칭이 생긴거다. korea통해 만약 유닉스라면 euc-kr로 자동변환되고 윈도우스면 cp949로 자동변환 됨 
euc-kr 한글 지원(유닉스에서만 가능)
cp949 한글 지원(유닉스,윈도 모두 사용가능)
 japan 일본어 지원[별칭]
- 유닉스에서는 euc-jp, 윈도에서 cp932로 자동 변환
latin1, ansi 영문 ASCII 형식

 

#5  vim .vimrc 에서 아래와 같이 set을 설정하자 (한글 변환)

 

주의 :  콤마(,) 중간에 빈칸 넣으면 안됨

 

윈도우에서 텍스트 내용 한글 입력 시 cp949 로 저장됨, 이를 utf-8을 기본으로하는 유닉스에 가져오면

LANG 환경변수의 기본값이 LANG=ko_KR.utf8 (Encoding set)  이기에 파일이 깨진다.

 

**fencs :  support가 가능한 encoding set list를 적어줌

**fenc:  현재 encoding 방식을 결정

 

 

vim에 한글을 포함한 문자열 만들고

명령코드에서 

:set fenc=korea     (유닉스에서 기본적으론 utf8 로 설정이 되있는데, 실습 위해 변경해보자. vimrc에서 설정 한게 아닌 에디터 명령모드에서 설정 한거기에 어차피 그 에디터에서만 적용이 된다

 

다음과 같이 입력 한다.

 

 

cat 으로 asd 텍스트파일 출력시 한글이 깨짐을 확인할 수 있다.  영문은 ASCII 코드 그대로 사용했기에 깨지지 않음.

 

#6 Linux to Window

1) 텍스트 파일을 window로 가져갈 때 UTF-8을 지원하는 에디터는 변환 설정을 할 필요없지만, 그렇치 않을 시 변환을 거쳐 가져가야 함.

2) 변환 방식

  a)  :set ff=dos

  b)  :set fenc=korea

  c)  :x          //다른 이름으로 저장할 경우   :sav new_dosfile.txt

 

a,b,c 단계를 통해 변환한다.

 

#7 Window to Linux

1)  fencs가 제대로 설정되어 있다면 실행 시 자동 변환됨.

fencs가 되있더라해도 리눅스에서 계속 사용위해선 다음과 같이 변환해야한다.

a) :set ff=unix

b) :set fencs=utf8

3) :x   //저장하고 나가기      다른  이름 저장 시   :sav new_unixfile.txt

 

 

참고로 내가  home 아닌 다른 dir에 vimrc 열 경우 홈 dir 절대경로 통해  vimrc들어감

jlim@jlim-vm:~/work$ vim ~/.vimrc

실습[중요!!!]  -  실습하면서 필자가 겪은 과정을 담었습니다.

 

 

윈도우에 텍스트 파일을 리눅스에 가져온다. 그리고 vimrc에서 set 한글변환설정 주석처리 한다.

 

 

주석처리했는데, cat으로 텍스트 파일 출력시 한글 그대로 잘 나오네?

 

 

:set fenc=korea로 설정하기 전 

 

 

:set=korea로 설정하니 다시 깨짐현상이 일어난다. 근데 차이는 출력할 때뿐만 아니라, 텍스트 내용에서도 꺠져있다는걸 확인할 수 있다.

set을 보면 fileencoding=latin1로 저장되있다 

fileencodings는 set=korea 설정이전과 동일함. 

 

재밌는건 vimrc 에서  아까 주석처리한 인코딩 set 설정을 풀면

파일 내용이 다시 원래대로 나왔다.

하지만, cat으로 출력 시 깨짐현상이 일어난다.

 

(참고로 이미 utf8로 파일인코딩이 적용되있었기에  윈도우즈의 파일을 리눅스로 가져와도 파일이 꺠져있지않았다.

이에 set=korea ( utf8 아님) 로 설정하니, 파일출력 뿐만 아니라 파일내용이 꺠짐을 발견할 수 있다.)

 

아무튼 왜 cat으로 출력시 깨짐현상이 일어나는지 원인을 찾아보니 

 

fileencodings 가 utf8 만 있었다. 또한, fileencoding=utf-8 이아닌 euc-kr 로 되있다. 

 

fileencodings 만 바꿔도 문자열이 깨짐은 지속됬다.

이에 실습 전의  명령모드 set환경을 참고하여 fileencoding=utf-8로 변경하니, 

 

다시 제대로 나오게 됐다.

 

(정리)

#7 Window to Linux  을 참고하면 윈도우즈에서 -> 리눅스로 파일 보내서, 해당 파일읽기 위해선 인코딩 변환과정을 거치는데, (명령모드 통해)

만약 파일내용이 꺠져있지 않았다면,  애초에 utf-8이 set 된것이기 떄문에 파일내용이 깨지지 않았던거다.

 

만약 vimrc에서 주석처리 한 set fencs 부분을 해제 해도 :set fenc=korea 를 통해 encoding이 euc-kr 로 변환된다.  즉 #6 Linux to Window  로 되있었기에 문자열을 출력할 때 깨짐 현상이 일어난거다!!!! (fileencoding=euc-kr)

단, fileencodings에선 ucs-bom,utf-8,korea,latin1 통해 vim 에디터에서 문자열이 깨지지 않음을 알 수 있다.

이에  set fenc=utf-8 로 변경하여 

파일을 에디터안에서 한글이 깨지지 않은 상태가 됨과  동시에 출력도 위처럼 잘 나오게 된다.


 

##2 abbreviation   => typedef 랑 동일    (궁금증 alias(별명) 과 abbrecviation 의 차이는 무얼까?  alias는 별명부여를 단 하나의 이름에만 할 수 있는건가? alias a= cas  alias b =cas  가 안되는걸까?   알아보자..)

 

#1. 특정 단어 입력시 대체 입력하는 기능

1) 입력모드에서 "time0"를 입력하면 현재 날짜와 시간이 입력 되고 "time1" 이라고 하면 로케일(locale) 에 맞는 시간이 입력되도록 만들 수있다.

 

#2. ab, ia 기능 이용

1) ia는 insert mode에서만 작동하는 기능

2) ca는 commandline mode에서만 작동하는 기능

ab 내메일 abcdegf@gamil.com
ab ProjectCpp /export/2/local/project/abc.cpp

ia 시간0 <C-R>=strftime("%Y.%m.%d-%H:%M:%S")<CR>   //<C-R>:Ctrl  ,  <CR>: ENTER
ia tlrks0 <C-R>=strftime("%Y.%m.%d-%H:%M:%S")<CR>      // man strftime  통해 c 언어 시간 함수 볼수있음

ia 시간1 <C-R>=strftime("%c")<CR>
ia tlrks1 <C-R>=strftime("%c")<CR>

 

#3 ca  기능 이용하면 한글상태 오타를 변환할 수 있다.

ca ㅈ w
ca 쥬 wb
ca ㅛ y
ca ㅌ x
ca ㅅ t

쥬 로 입력 시 wb로 바꿔치는 기능 가짐.

1) 한글 약어 매크로 사용시 주의점

-> .vimrc 파일이 EUC-KR 또는 cp949 로 되있으면  UTF-8 문서 편집시 작동안할 수있다. 인코딩 형식에 주의하자.

UTF-8로 저장하자.  (아까  필자가 실습했던 내용을 참조하면 좀 더 와닿을 수 있다 [  상당히 재미진 부분 ㅎㅎ])

 

2) abbreviation  명령어

명령어 설명
:ab [lhs] 현재 설정된 모든 약어 목록을 출력
lhs에 약어를 지정하면 해당 약어의 정보만 출력
:ab {lhs} {rhs} 약어 lhs를 rhs로 변환
:unab {lhs} 약어 lhs를 해제
:abclear 설정된 모든 약어 해제
:ia {lhs} {rhs} ab와 기능은 같지만 입력 모드에서만 작동
:ca {lhs} {rhs} ab와 기능은 같지만 명령행 모드에서만 작동

 

##3 key map

#1.  nmap <단축키> <명령>

=> normal mode에서만 작동

#2. imap <단축키> <명령>

=>  insert mode에서만 작동

#3.  map <단축키> <명령>

=> e.g  nmap <F2> :up<CR>

=> e.g imap <F4> abc@abc.com

 

 imap 통해 F2를 update 기능을 부여 하여, F2를 입력하면 업데이트가 되있다. 

:imap <F2> :up<CR>     F2 누를 시 업데이트 

 

https://soooprmx.com/vim%EC%9D%98-%ED%82%A4-%EB%A7%B5-%EC%84%A4%EC%A0%95-%ED%8C%81/

 

vim의 키 맵 설정 팁 · Wireframe

vim에서 키맵을 잘 활용하는 것의 중요성은 딱히 말하지 않아도 될 것 같으니, 키 맵을 설정하는데 있어서 몇 가지 알아두면 좋은 팁들을 소개하고자 한다. 키 맵 작성 방법 키 맵은 :map 명령을 사

soooprmx.com

 

 

#4. key 맵 리스트

명령어 설명
nmap key command 일반 모드에서 key 를 누르면 command를 실행
imap key command 입력 모드에서 key를 누르면 command 실행
vmap key command 비주얼 모드에서 key를 누르면 command 실행
cmap key command 명령행 모드에서 key를 누르면 command 실행

 

#5 .vimrc 파일에서 아래와 같이 map 설정하는 예시

"[ map ]   ": 주석
nmap <F2> :up<CR>
nmap <F3> :tabnext<Enter>     // tabnext<Enter> == gt
nmap <F4> :tabprev<Enter>     //tabnext<Enter> == gT 로 타이핑해도됨

 

##4 autocmd 

#1 특정  상황에서 자동으로 실행할 명령.

1)  예) *.c 파일을 열 때 자동으로 실행되어야 하는 명령

autocmd BufRead, BufNewFile *.txt colo evening     " 버퍼를 읽거나 버퍼가 새로운 파일을 만들 경우 파일명이 .txt인 경우 color 를 evening으로 적용"
autocmd BufRead, BufNewFile *.c colo morning|setlocal ts=2 sw=2   " 버퍼를 읽거나, 버퍼에 새로운 파일이 들어오면 그 파일명이 .c 파일이면 색은 morning, locale 옵션 을 ts=2 , sw=2로 설정

 

앞서 swap 파일이 존재하면 에러가 나는데 이를 자동으로 무시하는 방법은 다음과 같다,.

au SwapExists * let v:swapchoice= 'o'

v: swapchoice 스왑 파일이 존재하는 경우의 선택 (o: readonly)

v: swapchoice에는  e, q(나가기) 등등을 넣을 수 있음

au : auto 의 단축어.

 

#2 autocmd : pattern

1) 특정 경로명 패턴을 인식 시킬 수 있다.

autocmd BufRead,BufNewFile */include/* colo slate|setlocal ts=8 sw=8    "include directory에 있는 파일을 편집 시 colo, set locale에 내용들을 설정할 수 있다"
autocmd BufRead,BufNewFile */src/* colo torte|setlocal ts=2 sw=2       "src 편집시 colo, setlocal에 내용들을 설정 할 수 있다

 

hls: hight search 기능 .

36~38라인 부분은 클립보드기능으로 x11 사용시만 작동.

<CR> 이나 <ENTER> 둘중 하나 사용 함.

 

 

 abbreviation 세팅을 vimrc에서 적용

 


###2. 프로그래머들을 위한 기능

##1.  re-indenting

#1. 들여쓰기를 다시하기

re indenting =들여쓰기가 밀려쓰거나, 잘 안된 경우 자동으로 재 들여쓰기해주는 기능

 

1) ={motion}

=> motion에는 이동 관련 키 gg, G, )), ]] 등을 사용할 수 있다.

예)  문서 전체를 Re indenting 

a) gg (맨 위 첫번째 자리에 커서이동)  

b) =  (re indenting 기능)

c) G  (motion G 통해 문서전체를 자동정렬)

 

예) 특정 부분만 re indenting

visualmode + =

=>비주얼모드로 특정부분을 드래그하여 '=' 를 누르면 됨

 

 

##2. tab vs whitespace (con't)

#1. 기존 작성된 탭 문자를 공백 4칸으로 전환하고자 하는 경우 [실습 해보기]

:set et ts=4    :white space 설정 4

:ret   " 기존에 탭을 사용하고자 하는 경우 :ret

=> ret(retab) 보단 re-indenting 기능을 사용하는 편이 좋다.

 

 

#2 반대로 공백 4칸을 탭문자로 변환하려면 [실습 해보기]

:set noet ts=4
:ret!

 

##3 insert-completion

#1. 자동완성기능

 h만 입력한 뒤 CTRL-N 누르면 이전에 쓰였던 단어들 중 추론하여 자동완성을 해주는 기능을 제공.

 

#2. vim 은 #include 구문도 이해함.

 

1) CTRL - N : 단어 완성을 위해서 현재 문서와 관련 파일을 전방탐색

2) CTRL -P : CTRL-N 과 반대방향으로 탐색

 

e를 누르고 CTRL N  타이핑시 stdio.h 에 라이브러리 함수를 자동완성시켜주는 기능 존재.

 

 #3. 특수문자 포함된 단어들을 자동완성하려면?

abc<CTRL-N><CTRL-X><CTRL-N> ...  이런식으로 추가해 자동완성 시킬 수 있다.

이는 사전기반 검색이라 부른다.

 

#4 사전기반 검색, 파일명 검색

1)

명령문 (insert 모드) 설명
<CTRL-X> <CTRL-N> 더하기 낱말모드로 작동하여 추가 검색 가능
원하는 낱말이 아닌 경우 CTRL-N 을 계속 누름
<CTRL-X> <CTRL-K> <CTRL-N> 사전 검색 모드로 작동

 

2)파일명을 몇 글자 타이핑 후 <CTRL-X><CTRL0F> 누르면

파일명을 검색할 수 있다. 필자는 ~/ ./ 만 입력한채 CTRL-X CTRL-F 를 눌렀다.

 

 

#5 vim - bootstrap

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

하기 사이트에서 이미 만들어진 vimrc 를 약간 수정해서 사용하는 경우도 있다.

https://vim-bootstrap.com

 

해당 내용은  프로그래머스 리눅스 강의 김선영 선생님의 강의를 들으며 기록했습니다.

+ Recent posts