- 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
해당 내용은 프로그래머스 리눅스 강의 김선영 선생님의 강의를 들으며 기록했습니다.
'프로그래머스 > 리눅스' 카테고리의 다른 글
| 리눅스 기초(4-2) Package Manger (0) | 2022.11.06 |
|---|---|
| 리눅스의 기초 (4-1) -File System (basic) (0) | 2022.11.06 |
| 리눅스의 기초(3-6) 파일 관련 기능 (2) | 2022.11.06 |
| 프로그래머스 리눅스(3-5) 문자열 (0) | 2022.11.06 |
| 리눅스(기초 3-4) vim의 매뉴얼 (0) | 2022.11.05 |