레이블이 shortcut인 게시물을 표시합니다. 모든 게시물 표시
레이블이 shortcut인 게시물을 표시합니다. 모든 게시물 표시

windows cortana 사용 안하기

윈도우 cortana 는 한국어 지원도 안되고 사용할 일이 없는데,
(맥의 command+c 복사 단축키 습관으로) window+c 단축키로 cortana 가 실행된다.
cortana 가 실행되면 작업관리자에서 프로세스 종료하기 전까지 종료되지 않는다.

cortana 사용 안하기
gpedit.msc (그룹 정책 편집기) 실행 -> 컴퓨터 구성 -> 관리템플릿 -> windows 구성 요소 -> 검색 -> cortana 허용 -> 사용 안함

이제 윈도우 재부팅 이후 부터는 cortana 가 실행되지 않는다.

chrome shortcut

# mac 기준 chrome shortcut

# window,linux 에선 보통 cmd -> ctrl 을 사용하면 된다.
# 웹페이지의 이미지가 변경되었는데, 캐시되어서 새로고침(refresh)해도 그대로인 경우
# 다음 단축키로 캐시를 날리고 hard refresh 할 수 있다.(chrome, firefox 동일)
cmd+shift+r

# 탭 닫기
cmt+w

# 이전탭 이동
ctrl+shift+tab

# 다음탭 이동
ctrl+tab

# 주소줄 바로가기
cmd+l

# 주소줄 자동완성 지우기
주소줄 자동완성 항목에서 shift + delete

# 설정 열기(chrome://settings/)
cmd+,

# 북마크 삭제,추가
cmd+d

# history
cmd+y

# elements 검사
cmd+shfit+c

# console 창 toggle
cmd+option+j

# 확대/축소
cmd+=
cmd+-

# 이전/다음 페이지
cmd+[
cmd+]

iterm2 단축키

[분할개념]
Window(창) > tabs > panes

[단축키
cmd + enter : iterm2 창 최대화 토글
cmd + , : iterm2 설정
cmd + i : 현재 (세션) 설정
cmd + + : 폰트 키우기
cmd + - : 폰트 줄이기
cmd + n : 새창 열기
cmd + d  : 세로로 pane 분리
cmd + shift + d : 가로로 pane 분리
cmd + ] : 다음 pane 선택
cmd + [ : 이전 pane 선택
cmd + t : 탭 추가
cmd + left : 이전 탭 선택
cmd + right : 다음 탭 선택
cmr + r : 현재 pane 리셋(클리어)
cmd + / : 커서 위치 찾기
cmd + shift + e : 현재 pane 에 타임스탬프 보이기
cmd + shift + i : 분할된 모든 pane 에 입력 커서 활성화 토글(창내의 모든 pane,tab에 똑같은 입력할때 유용)
ctrl + a : 현재 커맨드 라인의 시작으로 커서 이동
ctrl + e : 현재 커맨드 라인의 끝으로 커서 이동
ctrl + - : 실행취소(undo)
cmd + shift + s : 현재 윈도우 정렬(멀티pane,위치,크기등)상태 저장
cmd + shift + r : 저장된 윈도우 정렬 복원(별도의 창을 생성해서 불러오기)

[윈도우 정렬 상태 관련]
- 현재 창의 새로운 탭에 복원하려면 restore window arrangement as tabs 사용
- 저장된 윈도우 상태들은 iterm설정(cmd+,) -> arrangements 에서 확인, 삭제 가능

vim-go, fzf c-t 단축키 충돌

# 터미널에서 fzf 를 C-T(control + t)로 기본 사용하고 있어
# vim 환경에서도 같은 shortcut 을 사용하려고 ~/.vimrc 에 다음과 같이 설정했다.
noremap <c-t> :FZF<enter>

# 일반적인 경우에는 잘 동작하는데, *.go 파일을 열었을 경우
# 다음과 같이 godef 스택 관련 명령이 실행된다.
vim-go: godef stack empty

# godef(정의로 이동)를 할때 이동한 위치를 스택으로 쌓는데
https://github.com/fatih/vim-go-tutorial 에 보면
# c-t 는 godef 이전 위치로 이동하는 것으로 지정되어 있다.
# 사용자가 map 으로 설정했지만 .go 에서는 vim-go 의 단축키가 우선하는 것 같다.

# 이런 문제가 나뿐만은 아닌지 이슈가 등록되어 있었다.

# 해결책은 다음과 go_def 매핑을 비활성화시키는 것이다.
let g:go_def_mapping_enabled=0

vscode 단축키

Visua Stduio Code 자주 사용하는 단축키
윈도우와 리눅스는 단축키가 같고, 맥에서는 ctrl -> cmd 로 생각하면 된다.

f2 # 심볼 모든 파일에서 한번에 바꾸기(rename symbol)
f5 # 디버그 시작/정지
shift + f5 # 디버그 중지
f9 # breakpoint on/off
f10 # 디버그 현재 라인 실행
f11 # 디버그 함수의 경우 함수 내부로 들어가서 실행
f12 # 함수 정의 가기
shift + f12 # 현재 함수를 참조하는 부분 보기
alt + shift + f # 포맷팅
alt + shift + i # 선택된 영역에서 각 라인의 끝에 커서 insert
ctrl + ` # 통합 터미널 열기
ctrl + n # 새문서 열기
ctrl + s # 현재 문서 저장
ctrl + p # 빠른 파일 열기
ctrl + d # 찾고 선택(selection)하기
ctrl + f2 # 선택(selection) 부분 현재 파일에서 전체 찾기(멀티 선택)
ctrl + f # 찾기
ctrl + f , 단어입력, alt + enter # 해당 단어 전체 선택(selection)
ctrl + shift + f # 프로젝트 전체에서 찾기
ctrl + shift + p # 명령어 보기
ctrl + f, alt + enter # 찾고나서 전체 선택하기
ctrl + g  or f3 # 다음 찾기
ctrl + shift + g  or shift + f3 # 이전 찾기
ctrl + [ # 들여쓰기(indent line)
ctrl + ] # 내어쓰기(outdent line)
ctrl + shift + [ # 현재 부분 접기(collapse)
ctrl + shift + ] # 현재 부분 펴기(uncollapse)
alt + cmd + [ # 현재 부분 접기(collapse) - mac
alt + cmd + ] # 현재 부분 펴기(uncollapse) - mac
ctrl + shift + \ # 현재 bracket open/close 위치로 점프
ctrl + - # 축소(zoom out)
ctrl + + # 확대(zoom in)
ctrl + w # 현재 편집창 닫기
ctrl + left or home # 현재 라인 앞으로 가기
ctrl + right or end # 현재 라인 끝으로 가기
ctrl + home # 파일 시작으로 가기
ctrl + end # 파일 끝으로 가기
ctrl + b # 사이드바 보기/닫기
ctrl + k, ctrl + c # 주석 처리
ctrl + k, ctrl + u # 주석 해제
ctrl + k, ctrl + i # 대상에 마우스 오버시 설명 표시(show hover)
ctrl + / # 주석 처리 / 해제
ctrl + \ # 편집창 나누기
ctrl + z # 실행 취소
ctrl + shift + z # 다시 실행
ctrl + alt + shift + up 위방향으로 컬럼 선택
ctrl + alt + shift + down 아래방향 컬럼 선택
ctrl + g # 라인 가기(go to line)
ctrl + - # 뒤로 가기(go back)
ctrl + shift + - # 앞으로 가기(go forward)
ctrl + shift + e # 파일 탐색기 열기 또는 포커싱
cmd + 1 # 오픈된 파일로 포커싱
cmd + down # 파일 탐색기에서 선택한 파일 오픈 - mac

[내가 사용하는 vscode 설정들]
바로가기키 설정
https://github.com/ysoftman/myenv/blob/master/vscode_settings/keybindings.json

mac shortcut

[윈도우키 대응 맥키]
shift = shift
ctrl = control
alt = option
window = command
참고로 맥북 키보드에서는 backspace = delete

[맥 단축키]
command + w  # 창 닫기
command + shift + w # 열려 있는 모든 창 닫기
command + option + w # 같은 종류의 창들 한번에 닫기
command + option + d # dock 보이기/숨기기 토글
command + q # 창 종료
command + m # 창 최소화
command + tab 해당 프로그램 선택 후 option 누른상태에서 command 버튼을 땐다. # 창 최소화 복원
command + , # 실행중인 프로그램 설정
command + a # 전체 선택
command + c # 복사
command + x # 잘라내기
command + v # 붙여넣기
command + shift + option + v # 서식없이 붙여넣기
command + z # 실행취소
command + f # 찾기
command + g # 다음 찾기
command + n # 새문서(또는 창) 열기
command + h # 현재 창 숨기기
command + tab (이후 이전 방향으로 전환시 command + `)  # 실행 프로그램 전환
command + ` # 같은 프로그램내에서 전환
command + up # 현재 문서의 처음으로 커서 이동
command + down # 현재 문서의 끝으로 커서 이동(finder 에서는 파일 열기)
command + left # 현재 문서의 라인 처음으로 커서 이동
command + right # 현재 문서의 라인 끝으로 커서 이동
command + [  # 앞으로 이동
command + ] # 뒤로 이동
command + l # 브라우저에서 주소입력란 가기
command + control + f # 전체 화면 전환 on / off
command + shift + 3 전체화면 캡쳐해서 파일로 저장하기
command + shift + 4 # 영역 캡쳐, 클립보드로 저장한 경우 미리보기.app -> cmd+n(클립보드에서 신규)로 열어 수정, 파일저장할 수 있다.
command + shift + 4 -> space # 창 캡쳐(창 여백 그림자가 생긴다.)
command + shift + 4 -> space -> option 누른 상태에서 창 캡쳐 # 창 여백 그림자 없이 캡쳐
command + option + esc # 응용 프로그램 강제 종료
command + space # spotlight 실행
command + backspace # finder 에서 파일 휴지통을 보내기, 파일저장 팝업창에서 저장안함 선택
command + shift + backspace # finder 에서 휴지통 비우기
command + shift + g # finder 에서 폴더로 이동
command + shift + . # 숨김 파일 보기 토글
command + control + space # 특수문자(이모티콘) 입력
command + backspace # 휴지통으로 가지 않고 바로 삭제
option # 부팅시 볼륨 표시
option + left # 앞단어로 커서 이동
option + right # 뒤단어로 커서 이동
option + backspace # 커서 앞 단어 삭제
option + enter # 한글입력에 대한 한자 변환
control + space # 한/영 전환
control + up # 현재 실행중인 프로그램 한번에 보기 on / off
control + down # 현재 선택된 프로그램만 보기 on / off
control + f2 # 현재 앱 메뉴로 포커스
fn + backspace # 커서 뒤 삭제
f11 # 바탕화면 보기
f12 # dashboard 보기(환경설정 ->  mission control -> dashboard 비활성화 할 수 있다.)
3번 클릭 # 현재 라인 선택

[한영 전환]
OS X Elcapitan 이전 버전에서는 command + space 로도 한/영 전환이 되었는데  OS X Elcapitan 부터 spotlight 을 무게를 싣기위해서인지 디폴트로 command + space 단축키를 할당하고 있다.
command + space 로 한/영전환에 익숙해졌으면
시스템 환경설정 -> 키보드 -> 단축키 설정
에서  입력소스(한/영전환) 과 spotlight 에 대한 단축키를 변경하자.
control 보다 space 와 가까운 option 과 command 를 사용하는것이 더 편한것 같다.
command + space # 한/영 전환
option + space # spotlight 실행

[사진 여러장 넘겨보기]
Finder 에서 여러개의 사진 파일(또는 디렉토리내의 전체 파일)을 선택 후 space 를 누르면 방향키로 사진을 앞뒤로 넘겨 볼 수 있다.

[top menu icon]
command + drag icon 좌우 # 아이콘 위치 변경하기
command + drag icon 메뉴 밖으로 # 아이콘 삭제

vscode 사용하기

sublime text 와 굉장히 유사한 형태로 마이크로스프트에서 오픈 소스로 내놓은 VSCode(Visual Studio Code) 무료로 다운로드 받아 사용할 수 있다.

MIT 라이센스로 SublimeText 처럼 회사에서 사용하려면 라이센스를 구입할 필요가 없다.
윈도우,리눅스,맥 버전이 제공된다.

vscode 다운로드
https://code.visualstudio.com

vscode 실행파일 code.exe(윈도우 기준)
sublime text 의 팔렛트로 플러그인을 깔았다면, vscode 의 팔렛트(Ctrl + Shift + P)에선 extension 프로그램을 설치하여 기능 확장이 가능하다.

vscode 는 Javascript, C#, json, html, css, 등을 기본 지원한다.
https://code.visualstudio.com/docs/languages/overview

html, json 파일이라면 자동 포맷팅(Alt + Shift + F) 기능을 지원한다.

단축키 정보 확인
File -> Preferences -> Keyboard Shortcuts

sublime text 에 많이 사용하는 다음의 기능들도 단축키까지 똑같다

선택 추가 (addSelectionToNextFindMatch)
ctrl + d

수직 위,아래 커서 추가(insertCursorAbove / insertCursorBelow)
ctrl+alt+up
ctrl+alt+down

shortcut(JSON) -> keybindings.json 에 커스텀 단축키 설정
자세한 팁 설명
https://github.com/Microsoft/vscode-tips-and-tricks

Linux 터미널 멀티플렉서 Tmux

Tmux (terminal multiplexer)는 하나의 터미널을 다수의 pane(영역)으로 구분하여 프로그램을 실행하고 각 프로그램 사이를 쉽게 이동할 수 있는 툴이다. 보통을 screen 툴을 사용하거나 gui 환경에선 터미널을 여러개의 탭으 생성하여 사용하는데, 한화면에서 여러개의 프로그램으로 돌리며 모니터링할 수 있는데는 tmux 가 좋다.
공식 홈페이지 http://tmux.sourceforge.net/

# Ubuntu 에서 설치
sudo apt-get install tmux

# CentOS 에서 설치
sudo yum install tmux

# MacOS 에서 설치
brew install tmux


#####


# tmux 명령어/단축키
tmux -V # 버전, 버전에 따라 명령이 조금 달라질 수 있다.
tmux # 실행(새로운 세션으로 터미널 열림)
tmux new-session # 실행(새로운 세션으로 터미널 열림)
tmux list-commands # tmux 명령어 보기
tmux ls # 열려 있는 세션 리스트
tmux kill-server # 모든 세션(tabs,pane)종료
tmux list-windows # tab(window) 리스트
tmux list-panes # pane 리스트
tmux a # 세션 붙이기(attach)
ctrl+b d # 세션 떼기(detach)

ctrl+b c # 새 window(tab) 생성
ctrl+b w # tab 리스트 보기 및 선택
ctrl+b n # 다음 tab 이동
ctrl+b p # 이전 tab 이동
ctrl+b f # tab 찾기
ctrl+b 번호  # tab 로 이동
ctrl+b , # 현재 tab 이름 변경
ctrl+b & 또는 exit # 현재 tab 종료

ctrl+b % # 수직으로 pane 나누기
ctrl+b " # 수평으로 pane 나누기
ctrl+b q 번호선택 # pane 번호 보기 및 번호로 pane 선택
ctrl+b 방향키 # pane 이동(ctrl+b 후 방향키로 계속 이동 가능)
ctrl+b spacebar # pane 레이아웃 변경
ctrl+b alt+방향키 # pane 크기 변경
ctrl+b x 또는 exit # 현재 pane 종료

ctrl+b m 현재 pane mark/unmark
ctrl+b { 현재 선택한 pane 과 위쪽 pane 위치 교환
ctrl+b } 현재 선택한 pane 과 아래쪽 pane 위치 교환


ctrl+b : # 명령 프롬프트 사용
ctrl+b t # 현재 시간 보기
ctrl+b ? # 설정된 단축키 보기

# copy & paste
# setw -g mode-keys vi 로 vi 단축키를 활성화 선행
ctrl+b [ # copy mode 시작
spacebar # 블럭지정 시작, 방향키로 복사할 블럭 지정
enter # 복사
ctrl+b ] # 붙이기

# find
ctrl+b [ # copy mode 시작
/ # 찾을 문자 입력, vi 찾기와 같음

# 수직분할 후 수평분할된 3개의 pane 을 가진 세션 시작
tmux new-session \; \
split-window -v \; \
split-window -h \;
attach


#####


# tmux 시작시 로딩되는 설정파일
# 명령 프롬프트로에서도 사용
vi ~/.tmux.conf
# -g global option
set -g display-panes-time 5000 # 5초 동안 pane 숫자 보이기

# 마우스 사용 활성화
# tmux 1.9 이전
#set -g mode-mouse on
#set -g mouse-resize-pane on
#set -g mouse-select-pane on
#set -g mouse-select-window on
# tmux 1.9 이후
set -g mouse on

# setw -> set window
setw -g mode-keys vi # vi 단축키 사용(디폴트는 emacs)

#setw synchronize-pane on # 모든 panes 에 동시 입력 활성화
#setw synchronize-pane off # 모든 panes 에 동시 입력 해제

# ctrl+b i panes 동시 입력 활성화 단축키
# ctrl+b I panes 동시 입력 비활성화 단축키
bind i setw synchronize-panes on
bind I setw synchronize-panes off

# 기본 prefix(ctrl+b) 대신 ctrl+a 사용하기
#set -g prefix C-a
#bind C-a send-prefix
#unbind C-b


# 여러개의 pane 생성하고(tiled 레이아웃 사용) 각 pane 에 명령 실행하기
# 현재 창을 계속 split-window 하면 공간이 없다는 에러 발생하기 때문에
# select-pane 으로 활성 창을 옮겨가며 분할해야 한다.
unbind S
bind S \
split-window -v\; \
split-window -v\; \
split-window -v\; \
split-window -v\; \
select-pane -t 00\; \
split-window -h\; \
split-window -h\; \
split-window -h\; \
select-pane -t 04\; \
split-window -h\; \
split-window -h\; \
split-window -h\; \
select-pane -t 08\; \
split-window -h\; \
select-layout tiled\;

# 위에 생성한 창(pane)들의 쉘 프롬프트가 늦게 뜨면 send-key 전달이 되지 않아
# 창들의 쉘 프롬프트가 완료된 후 접속하는것이 좋다.
unbind s
bind s \
select-pane -t 00\; send-keys 'echo ysoftman0' Enter \; \
select-pane -t 01\; send-keys 'echo ysoftman1' Enter \; \
select-pane -t 02\; send-keys 'echo ysoftman2' Enter \; \
select-pane -t 03\; send-keys 'echo ysoftman3' Enter \; \
select-pane -t 04\; send-keys 'echo ysoftman4' Enter \; \
select-pane -t 05\; send-keys 'echo ysoftman5' Enter \; \
select-pane -t 06\; send-keys 'echo ysoftman6' Enter \; \
select-pane -t 07\; send-keys 'echo ysoftman7' Enter \; \
select-pane -t 08\; send-keys 'echo ysoftman8' Enter \; \
select-pane -t 09\; send-keys 'echo ysoftman9' Enter \; \
select-pane -t 10\; send-keys 'echo ysoftman10' Enter \; \
select-pane -t 11\; send-keys 'echo ysoftman11' Enter \;

# 별도 설정 파일 읽기
# source-file ~/workspace/a/a.conf;
# 별도 설정 파일이 존재하면 읽기
if-shell "test -f ~/workspace/a/a.conf" "source ~/workspace/a/a.conf"

# tmux 다시 읽기
# display-message (alias: display) 상태바에 메시지 출력  -p 사용하면 stdout에 출력
bind r source-file ~/.tmux.conf \; display "ysoftman ~/.tmux.conf loaded"

# 현재 바인딩되 있는 모든 단축키 확인
tmux list-keys


#####


iterm2 에서 tmux의 내용을 마우스 드래그해서 copy and paste 가 안될때는
iterm2 -> preferences -> gerneral -> applications in terminal my access clipboard 활성화 (아래 그림 참고)



#####


# .bashrc, .zshrc 에 설정시
# TMUX 변수 값을 확인해 중복 실행을 막는다.
if [ -z "$TMUX" ]; then exec tmux; fi

Eclipse 유용한 단축키

f11 # 디버깅 시작 mac command + f11
f8 # 디버깅 계속
f6 # 디버깅 한줄 실행
f5 # 디버깅 함수 내부로 들어가기
f3 # 함수 정의 가기  mac 동일
ctrl + shift + f # 자동 포맷팅 mac command + shift + f
ctrl + shift + b # 브레이크 포인트 on/off mac command + shift + b
ctrl + alt + left # 이전 위치로 가기 mac command + [
ctrl + alt + right # 다음 위치로 가기 mac comamnd + ]
ctrl + w # 현재 창 닫기 mac command + w
ctrl + h # 파일들에서 찾기 mac 동일
ctrl + f # 찿기 몇 변경 mac command + f
ctrl + k # 다음 찾기 mac command + k
ctrl + shift + k # 이전 찾기 mac command + shift + k
ctrl + space # 멤버리스트 보기 mac 동일
ctrl + b # 전체 빌드 mac command + b
ctrl + i # 자동 들여쓰기 mac command + i
ctrl + d # 지우기 mac command + d
ctrl + l # 라인 위치 가기 mac command + l
ctrl + / # 현재 라인 또는 블럭 주석 처리 및 해제 mac command + /
ctrl + + # 줌인 mac command + +
ctrl + - # 줌아웃 mac command + -
alt + shift + r # 변수명 일괄 변경 mac alt + command + r

# 참고
단축키 설정 : Windows -> Preferences -> General -> Keys

Linux Xwindow <-> Prompt 전환 단축키

리눅스에서
Xwindow -> Prompt 화면으로 전환하기
Ctrl + Alt + F1 ~ F6

Prompt -> Xwindow 화면으로 전환하기
Alt + F7

Windows MS Word 단축키 모음

MS Word 단축키 모음
문서 미리 보기 : Ctrl + Alt + I
문서 새로만들기 : Ctrl + N
문서 열기 : Ctrl + O
문서 닫기 : Ctrl + W
문서 저장 : Ctrl + S
인쇄하기 : Ctrl + P
문자열 찾기 : Ctrl + F
문자열 바꾸기 : Ctrl + H
글꼴 굵게 설정 : Ctrl + B
글꼴 밑줄 설정 : Ctrl + U
글꼴 이탤릭 설정 : Ctrl + I
글꼴 크기 1pt 늘리기 : Ctrl+]
글꼴 크기 1pt 줄이기 : Ctrl+[
글꼴 대화상자 : Ctrl + Shift + P
서식복사하기 : Ctrl + Shift + C
서식붙이기 : Ctrl + Shift + V
대문자로 바꾸기 : Ctrl + Shift + A
텍스트 왼쪽 맞춤 : Ctrl + L
텍스트 가운데 맞춤 : Ctrl + E
텍스트 오른쪽 맞춤 : Ctrl + R
텍스트 양쪽 맞춤 : Ctrl + J
필드 업데이트(필드 선택하고) : F9
필드 코드 표시/숨김 : Alt + F9
다음 필드로 이동 : F11
이전 필드로 이동 : Shift + F11
날짜 필드추가 : Alt + Shift + D
시간 필드추가 : Alt + Shift + T
페이지번호 필드추가 : Alt + Shift + P
줄 구분 : Shift + Enter
쪽 구분 : Ctrl + Enter
표안에서 행의 다음 셀로 이동 : Tab
표안에서 행의 이전 셀로 이동 : Shift + Tab
표안에서 행의 첫번째 셀로 이동 : Alt + Home
표안에서 행의 마지막 셀로 이동 : Alt + End
표안에서 열의 첫번째 셀로 이동 : Alt + PageUp
표안에서 열의 마지막 셀로 이동 : Alt + PageDown

vim command

[vim 설치]
# vim 은 vi 를 향상시킨 버전으로 GUI 용인 gVim 도 있다.
# 윈도우 또는 소스설치는 vim 사이트에서 다운로드
http://www.vim.org/
# 레드햇 계열 리눅스
sudo yum install vim
# 데미안 계열 리눅스
sudo apt-get install vim

[용어]
normal 모드 : 기본 모드로 명령을 실행할 수 있는 상태로, 다른 모드로 전환하기 전의 상태
insert 모드 : i, a 등으로 수정(쓰기)작업을 할 수 있는 상태
visual 모드 : v 로 특정 블럭을 지정(선택)할 수 있는 상태
register : yank(copy역할)등으로 저장된 메모리 공간(클립보드 역할)
buffer : 파일을 읽어 놓은 메모리 공간, 버퍼 수정 저장해야 파일로 쓰게 된다.
window : 버퍼 내용이 표시되는 화면
tab : 여러 windows 들의 모음

[.vimrc 설정 예시]
" vimrc 에서 주석은 " 를 사용한다.
" ysoftman .vimrc 설정
syntax on
color elflord
set number
set hlsearch
set incsearch
set backspace=indent,eol,start
set enc=utf-8
set fencs=utf-8,cp949
set tabstop=4
set autoindent
" gvim 의 경우 source $VIMRUNTIME/vimrc_example.vim 에서 텍스트 파일을 열때 textwidth=78 로 설정하고 있는데 이를 수정함
autocmd FileType text setlocal textwidth=0 tabstop=4 shiftwidth=4
if has("gui_running")
 set guifont=나눔고딕코딩:h10 " 폰트 설정
 au GUIEnter * winsize 100 50 " 시작시 윈도크 크기 설정
endif

[vim 명령어]
esc "ctrl+c 명령 취소
syntax on "신택스 기능 활성화
color elflord 또는 colorscheme elflord "컬러설정, syntax 활성화되어야 함
highlight Normal ctermbg=none "하이라이트로 normal 그룹에 color terminal background 색은 무시, 컬러스킴의 black 아닌 none 값으로 검은색 배경이 된다.
highlight ColorColumn ctermbg=brown "colorcolumn 색변경, 컬러스킴 설정 후 에 명시해야 적용된다.
ctrl+w n "새창 만들기, :new
ctrl+w s "현재파일을 수평창으로 나눔, :sp
ctrl+w v "현재파일을 수직창으로 나눔, :vs
ctrl+w o "현재창만 놔두고 모든 분할된 창 닫기
ctrl+w q "현재창 닫기
ctrl+w = "창들을 균등하게 분할
ctrl+w w 또는 방향키 또는 h,j,k,l 방향키 "창들간에 이동
ctrl+w H "현재 창을 왼쪽으로 이동
ctrl+w L "현재 창을 오른쪽으로 이동
ctrl+w J "현재 창을 아래쪽으로 이동
ctrl+w K "현재 창을 위쪽으로 이동
ctrl+w n< "현재 창 n(명시하지 않으면 1)만큼 width 줄이기
ctrl+w n> "현재 창 n(명시하지 않으면 1)만큼 width 늘리기
ctrl+w n- "현재 창 n(명시하지 않으면 1)만큼 height 줄이기
ctrl+w n+ "현재 창 n(명시하지 않으면 1)만큼 height 늘리기
20ctrl+w _ "창 높이를 20라인 크기로 조정, :resize 20
100ctrl+w | "창 폭을 100컬럼 크기로 조정, :vertical resize 100
ctrl+f "page down
ctrl+b "page up
ctrl+d "반페이지 down
ctrl+u "반페이지 up
ctrl+v "visual block mode, 세로로 블럭 지정 가능
insert 모드에서 ctrl+v숫자 "터미널로 입력되는 특수키 문자 파악, 예를 들어 숫자에 027입력하면 ^[ --> ESC 키로 ^와[ 를 조합된게 아님, 065는 A로 표시된다
ctrl+z "vim 중지하고 백그라운드로 전환해 쉘이 보임, fg 로 vim으로 다시실행, :sh 와 exit 도 같은 기능
h "커서 왼쪽 이동
l "커서 오른쪽 이동
j "커서 아래쪽 이동
k "커서 위쪽쪽 이동
2h "커서 왼쪽 2칸 이동
2l "커서 오른쪽 2칸 이동
2j "커서 아래쪽 2줄 이동
2k "커서 위쪽쪽 2줄 이동
10G "10 라인으로 이동
10+ "현재 라인에서 10 라인 아래로 이동
10- "현재 라인에서 10 라인 이전으로 이동
H "현재 화면에서 첫 라인으로 이동
M "현재 화면에서 중간 라인으로 이동
L "현재 화면에서 마지막 라인으로 이동
~ "현재 커서 대문자 -> 소문자, 소문자 -> 대문자 변환
J 또는 블럭 선택 후 :join "현재 라인의 맨끝에서 라인 2개를 1개로 합친다. 합쳐진 라인의 indent 는 삭제되고 공백이 추간된다. 블럭으로 멀티 라인을 선택해서 합칠 수도 있다.
u "최근 편집명령 하나 취소
u "visual 모드, 선택한 블럭 소문자로 변환
U "visual 모드, 선택한 블럭 대문자로 변환
r "현재 커서 글자 하나 수정
R "Replace mode, 모든 문자위에 덮어 쓰기 할 수 있는 상태가 된다.
I "insert 모드, 현재줄 맨 앞에 추가
A "insert 모드, 현재줄 맨 끝에 추가
i "insert 모드, 커서 앞에 추가
a "insert 모드, 커서 뒤에 추가
v "visual 모드, 블럭 문자 단위 지정, :로 명령모드에서 :'<,'> 로 자동 입력
V "visual 모드, 블럭 라인 단위 지정, :로 명령모드에서 :'<,'> 로 자동 입력
y "visual 모드에서 지정한 블럭 register 로 복사
yy "커서가 있는 라인을 복사
yb "커서부터 단어의 앞까지 복사
yw "커서부터 단어의 뒤까지 복사
p "커서 뒤에 1번 붙여넣기, np 하면 n번 반복
P "커서 앞에 1번 붙여넣기, nP 하면 n번 반복
n| "현재라인에서 n컬럼으로 이동
f문자 "현재라인에서 오른쪽방향으로 문자가 있는곳으로 이동
F문자 "현재라인에서 왼쪽방향으로 문자가 있는곳으로 이동
t문자 "현재라인에서 오른쪽방향으로 문자가 있는곳 한칸 전으로 이동
T문자 "현재라인에서 왼쪽방향으로 문자가 있는곳 한칸 전으로 이동
; "f,F,t,T문자 이동 반복
n% "파일의 n%퍼센트 라인으로 이동
x "한글자 삭제
ggdG "전체 삭제, 파일 처음 위치로 가서 파일 끝까지 삭제
횟수dw "횟수만큼 dw 수행
횟수dd "횟수만큼 dd 수행
dw "커서가 있는 단어 삭제
dd "커서가 있는 라인 삭제
d^ "커서 부터 라인 시작까지 삭제
d$ 또는 D "커서 부터 라인 끝까지 삭제
diw "delete inner word, 현재 커서가 있는 단어 하나 삭제, 커서가 공백 위라면 공백만 삭제
daw "delete a word, 현재 커서가 있는 단어 하나 삭제
dis "delete inner sentence, 현재 커서가 있는 문장(. ! ? 공백 탭등으로 구분) 삭제, 커서가 문장 사이에 공백 위라면 공백만 삭제
das "delete a sentence, 현재 커서가 있는 문장((. ! ? 공백 탭등으로 구분) 삭제
dt문자 "현재 커서에서 문자 전 까지 삭제
df문자 "현재 커서에서 문자 까지 삭제
d/스트링 "현재 커서에서 스트링이 있는 곳까지 삭제
cb "현재 커서 이전부터 단어 시작까지 삭제(register 에 저장)하고 insert 시작
cw 또는 ce "현재 커서부터 단어까지 삭제(register 에 저장)하고 insert 시작
cc 또는 S "현재 라인 삭제(register 에 저장함)하고 insert 시작
ciw "현재 커서가 있는 단어 하나 삭제(공백 미포함, 커서가 공백 위라면 공백만 삭제) 후 insert 모드
caw "현재 커서가 있는 단어 하나 삭제(공백 포함) 후 insert 모드
ci( 또는 ci) "현재 커서에서 가장 가까운 () 내용 삭제 후 insert 모드
ca( 또는 ca) "현재 커서에서 가장 가까운 ()과 () 내용 삭제 후 insert 모드
ci{ 또는 ci} "현재 커서에서 가장 가까운 {} 내용 삭제 후 insert 모드
ca{ 또는 ca} "현재 커서에서 가장 가까운 {}과 {} 내용 삭제 후 insert 모드
s "현재 문자 삭제(register 에 저장함)하고 insert 시작
. "마지막 명령 반복 수행
qa "a 이름의 매크로 기록 시작
q "매크로 기록 종료
@a "a 매크로 실행
@@ "이전 실행한 매크로 실행
10@a "a 매크로 10번 실행
$ "현재 라인의 끝으로 이동
0 "현재 라인의 시작으로 이동
^ 또는 _ "현재 라인의 공백아닌 첫문자로 이동
+ 또는 ctrl+m "다음 라인의 공백아닌 첫문자로 이동
- "이전 라인의 공백아닌 첫문자로 이동
w "다음 단어의 첫문자로 커서이동
W "공백으로 구분되는 다음 단어의 첫문자로 커서이동
e "다음 단어의 마지막 문자로 커서이동
E "공백으로 구분되는 다음 단어의 마지막 문자로 커서이동
b "한단어 뒤로 단어의 첫문자로 커서 이동
B "공백으로 구분되는 한단어 뒤로 단어의 첫문자로 커서이동
t문자 "현재 라인에서 오른쪽 방향으로 문자 위치 바로전으로 커서 이동
f문자 "현재 라인에서 오른쪽 방향으로 문자 위치로 커서이동
T문자 "현재 라인에서 왼쪽 방향으로 문자 위치 바로전으로 커서 이동
F문자 "현재 라인에서 왼쪽 방향으로 문자 위치로 커서이동
V(비주얼모드로 블럭선택후) > "sw 크기 만큼 오른쪽으로 이동, indent
V(비주얼모드로 블럭선택후) < "sw 크기 만큼 왼쪽으로 이동
>> "sw 크기 만큼 오른쪽으로 이동, indent
<< "sw 크기 만큼 왼쪽으로 이동
{ "이전 문단으로 이동
} "다음 문단으로 이동
[[ "이전 섹션으로 이동
]] "다음 섹션으로 이동
% "현재 커컷상의 ([{}]) 에 짝이 되는 곳으로 이동
# "현재 커서상의 워드 문자열 찾고 이전으로 이동
* "현재 커서상의 워드 문자열 찾고 다음으로 이동
/string "문자열 앞으로 찾기, n 으로 다음찾기
/\cstring 또는 /string\c "\c로 주면 대소문자 구분없이 찾기
/\Cstring 또는 /string\C "\C로 주면 대소문자 구분해서 찾기
/\<word\> \< 는 단어 시작, \> 는 단어 끝으로 word 길이도 일치해 찾기
/대상1\|대상2\|대상3"\| 구분으로 여러개 한번에 찾기
?string "문자열 뒤로 찾기, n 으로 이전찾기
n "찾은 문자열들 중에서 다음으로 이동
N "찾은 문장열들 중에서 이전으로 이동
gf "명시된 파일로 바로가기
gd "현재 단어(변수) 현재 파일내에서 정의 위치로 가기
gD "현재 단어(변수) 현재 함수내에서 정의 위치로 가기
gt "다음 탭으로 이동 :tabn
gT "이전 탭으로 이동 :tabp
m{a-z} "ma 하면 a이름으로 마크, 현재 버퍼내에서만 마크됨, 다른 파일에선 마크로 이동 못함
m{A-Z0-9} "mA 하면 A이름으로 마크, 파일까지 마크됨, 다른 파일에서도 마크로 이동 가능
'마크이름 "마크 위치의 라인 첫위치로 이동
`마크이름 "마크 정확한 위치로 이동
ctrl+6 "이전 파일 열기
ctrl+o "이전 위치로 점프
ctrl+i "앞 위치로 점프
v zf "블럭 선택 후 블럭 폴딩/닫기
za "현재 커서 위치에서 폴딩 토글
zo "폴딩된 라인에서 폴딩 열기
zc "폴딩된 라인에서 폴딩(닫기)
zd "폴딩 삭제
zk "이전 폴딩으로 이동
zj "다음 폴딩으로 이동
zm "(깊은 폴딩 부터,foldlevel 1개 감소) 폴딩 닫기
zM "모든 폴딩 닫기
zr "(깊은 폴딩 부터,foldlevel1개 증가) 폴딩 열기
zR "모든 폴딩 열기
= "프로그램 소스코드에서 v 로 영역을 선택하고 = 누르면 선택된 영역들의 줄들이 알맞게 들여쓰기됨
== "현재 라인 들여쓰기
gg=G "파일 처음부터 끝까지 알맞게 들여쓰기됨
=% "프로그램 소스코드에서 시작블럭{ 이나 끝블럭} 에서 =% 누르면 블럭내의 줄들이 알맞게 들여쓰기됨
K "현재 커서에 대한 대문자 메뉴얼 페이지 보기
ctrl+r "최근 취소된 편집명령 복구
ctrl+g "현재 파일이름과 라인수 보기
ctrl+n "자동완성 리스트에서 다음 항목
ctrl+p "자동완성 리스트에서 이전 항목, 프로그래밍시 함수,변수에서 ctrl+p 하면 자동완성, 예를 들어 int YoonByoungHon = 0; 후 다음 줄에서 Yo부분에서 ctrl+p 하면 YoonByoungHoon 이 바로 입력되거나 Yo 로 시작하는 리스트중에서 선택가능
"레스트터이름명y "레지스터에 내용 복사
"레스트터이름명p "레지스터의 내용 붙여넣기
"+y "+는 CLIPBOARD, vim -> CLIPBOARD 으로 복사
"+p "+는 CLIPBOARD, CLIPBOARD -> vim 으로 붙여 넣기
:reg "레지스터 내용 보기, type -> c:characterwise, l:linewise, b:blockwise-visual
:help 또는 :h "도움말 보기
:help i "i 도움말보기
:help :e ":e 도움말보기
:help ctrl-r "ctr+r 도움말보기
:messages "vim 이 출력하는 메시지 보기
:stop 또는 :suspend "suspend vim 로 ctrl+z 와 같다.
:color 또는 colo 또는 colorschem "현재 설정된 컬러 스킵 보기, 공백 후 tab, shift-tab 을 누르면 사용 가능한 컬러 스킴이름이 표시된다.
:intro "인트로 화면 보기
:print "현재 커서 위치의 라인 내용 출력
:language 또는 lang "현재 언어 설정 보기
:!외부명령 "외부명령실행, 예를 들어 !ls -ahl 하면 는 ls -ahl 실행
:f "현재 파일이름과 라인 수 보기
:n "n라인으로 이동
:% "%는 현재파일을 의미한다. 파일 전체 범위 지정, :1,$ 와 같다.
:0 또는 gg "파일의 첫번째 행으로 이동
:$ 또는 G "파일의 마지막 행으로 이동
:e filename "파일 새로 열기(버퍼), :e filename 입력시 ctrl+d 하면 현재 위치의 파일 리스트 표시
:e ++enc=cp949 "cp949 인코딩으로 다시 열기, 참고로 .vimrc 에서 set fencs=utf-8,cp949 하면 알맞은 인코딩을 파일을 연다
:w ++enc=utf-8 filename "명시한 파일을 utf-8 로 인코딩해서 저장
:w ++enc=utf-8 % "현재 파일을 utf-8 로 인코딩해서 저장
:e! "파일 다시 읽기
:noau e filename.gz 또는 vi -c "noau e filename.gz" "gzip 파일 압축해서해서 열지 않기, vim 은 기본적으로 gzip 파일은 압축해서 연다.
:bp 또는 bprevious "이전 버퍼로 이동, 버퍼는 메모리에 올라가 있는 파일로 vim a.txt b.txt 했을때 2개의 텍스트 버퍼가 생성된다. 화면 위에 버퍼 내용들이 표시된다.
:echo 표현 "뒤 오는 표현 내용 출력
:echo winnr() "현재 창 번호 출력
:echo winnr('$') "마지막 현재 창 번호 = 창 개수 출력
:echo bufnr() "현재 버퍼 번호 출력
:echo bufnr('$') "마지막 버퍼 번호 출력
:bn 또는 :bnext "다음 버퍼로 이동
:bd 또는 :bdel "현재 버퍼 삭제/닫기
:buffers 또는 :ls 또는 :files "버퍼 리스트 보기
:%bwipeout 또는 :%bw "모든 버퍼 삭제/닫기
:tabs "탭 리스트 정보
:tabe 또는 :tabnew "새탭열기) 또는 :tabe 파일명
:tabc 또는 :tabclose "현재 탭닫기, tabc! 저장하지 않고 닫기
:tabo "모든 탭 닫기, tabo! 저장하지 않고 닫기
:tabp 또는 :tabprevious 또는 gT "이전 탭으로 이동, vim -p a.txt b.txt 했을때 2개의 탭으로 열린다.
:tabn 또는 :tabnext 또는 gt "다음 탭으로 이동, tabn3 3번 탭으로 이동
:marks "마크 리스트
:delmarks 마크이름 ":delmarks a b 하면 a와 b 마크 지우기, :delmarks \" 하면 " 마크 지우기, delmarks 0-9 a-z A-Z 숫자,영문자 마크 모두 삭제, ' 이름의 마크는 바로 이전 위치에 대한 마크로 삭제할 수 없다.
:new "새창 만들기
:sp "수평으로 창을 나누기
:vs "수직으로 창을 나누기
:sp 파일명 "수평으로 창을 나누고 파일 열기
:vs 파일명 "수직으로 창을 나누고 파일을 열기
:Explore "현재 파일 탐색 표시, 탐색창에서 o 는 파일 열기, p 는 파일 프리뷰
:Sexplore "수평으로 창을 나누고 탐색 표시
:Vexplore "수직으로 창을 나누고 탐색 표시
:ju 또는 :jumps "점프 리스트 표시
:clearjumps "현재 윈도우 점프 리스트 지우기
:sh "잠시 쉘로 나가기, 쉘에서 exit 하면 vi로 복귀
:copen "quickfix list 창 열기
:ccl 또는 :cclose "quickfix list 창 닫기
:cw 또는 :cwindow "에러 있으면 quickfix list 창 열기
:cl 또는 :clist "quickfix list 보기
:cn "quickfix list 중 다음 항목
:cp "quickfix list 중 이전 항목
:cfirst "quickfix list 중 첫번째 항목
:clast "quickfix list 중 마지막 항목
:cfdo 명령 "quickfix list 항목별 명령 실행
:lopen "location list 창 열기
:lcl 또는 :lclose "location list 창 닫기
:lnext "location list 중 다음 항목
:lprev "location list 중 이전 항목
:lfirst "location list 중 첫번째 항목
:llast "location list 중 마지막 항목
:retab "set expandtab 으로 탭입력이 스페이스로 변경되는 상태에서, 모든 tab 을 space 로 변경
:retab! "set noexpandtab 으로 탭입력이 스페이스로 변경되지 않는 상태에서, 모든 space 를 tab 으로 변경
:set spell 스펠링 체크 활성화(스펠이 이상한 경우 밑줄 표시)
:set nospell 스펠링 체크 비활성화
:set all "모든 설정 보기
:set 설정명 "설정 값 보기
:set enc=utf-8 "인코딩 utf-8 로 사용
:set visualbell t_vb= "beep 대신 t_vb 로 설정된 문자로 표시하는데 설정 문자가 없어 visual bell 도 사용하지 않게 된다.
:set hidden "버퍼 숨김 활성화, 버퍼를 수정 후 파일로 저장하지 않아도 다른 버퍼로 이동 :bn 할 수 있다. 숨김이 비활성화되어 있으면, 버퍼를 수정 후 저장해야 다른 버퍼로 이동 할 수 있다.
:set autoread "파일 자동 refresh
:set updatetime=1000 "화면 갱신 주기(default: 4000ms), 커서 사용중일때는 갱신 않함
:set laststatus=2 "상태바 활성 0:비활성 1:윈도우가2개이상일때(디폴트) 2:항상
:set showtabline=2 "탭바 활성 0:비활성 1:탭이2개이상일때(디폴트) 2:항상
:set mouse=a "gui 환경에서 마우스 사용 가능, 기본 mouse=""
:set number 또는 :set nu "라인 번호 표시, 끝에 !붙이면 토글
:set nonumber 또는 :set nonu "라인 번호 표시 안하기
:set relativenumber 또는 :set rnu "라인 번호 표시, 끝에 !붙이면 토글
:set incsearch 또는 :set is "키 입력 마다 찾기 결과 표시
:set noincsearch 또는 :set nois "키 입력 후 엔터시에만 찾기 결과 표시
:set hlsearch "검색결과 하이라이트
:nohl "하이라이트 제거
:highlight "하이라이트 색설정 상태
:set showcmd "명령모드에서 명령 표시, 비주얼 모드에서 선택크기 표시
:set cursorline 또는 :set cul "현재 커서 라인 하이라이팅 활성화
:set nocursorline 또는 :set nocul "현재 커서 라인 하이라이팅 비활성화
:set cursorcolumn 또는 :set cuc "현재 커서 컬럼 하이라이팅 활성화
:set nocursorcolumn 또는 :set nocuc "현재 커서 컬럼 하이라이팅 비활성화
:set colorcolumn=100 "컬럼 가이드 라인 컬러로 보이기
:set syntax=sh "파일 타입을 .sh 로 설정
:set autoindent "자동들여 쓰기 활성화
:set noautoindent "자동들여 쓰기 비활성화
:set cindent "C 프로그래밍용 들여쓰기 활성화
:set nocindent "C 프로그래밍용 들여쓰기 비활성화
:set wrap "자동 줄 바꿈
:set nowrap "자동 줄 바꿈 안하기
:set textwidth=n "n만큼 텍스길이기 넘으면 다음줄로 이동, 0이면 다음줄 이동 제한 없음
:set ignorecase 또는 :set ic "찾기시 대소문자 무시
:set noignorecase 또는 :set noic "찾기시 대소문자 구분
:set lines "라인 크기 설정보기
:set lines=80 "라인 80 로 설정
:set iskeyword=@,48-57,_,-,192-255,# "설정된 문자로 연결되면 하나의 워드로 취급
:set iskeyword+=- "워드로 취급문자에 - 도 추가
:set list "탭,스페이스,엔터 등의 기호 표시
:set listchars=tab:→\ ,space:·,trail:·,precedes:«,extends:»,eol:↵ "탭,공백,라인끝공백,접기,펼치기,엔터 문자 설정
:set nolist "탭,스페이스,엔터 등의 기호 표시 안하기
:set ts=n 또는 :set tabstop=n "탭크기를 n으로 설정
:set sw=n 또는 :set shiftwidth=n "들여쓰기 >>, 내여쓰기 <<, 될때 또는 엔터등으로 자동 들여쓰기 될때 이동 크기
:set et 또는 :set expandtab "탭키 입력시 탭 대신 tabstop=n 만큼의 스페이스 사용
:set noet 또는 :set noexpandtab "et 비활성화, 탭키 입력시 탭 사용
:set esckeys "insert 모드에서 방향키 제대로 작동시키기
:set backspace=indent,eol,start "insert 모드에서 백스페이스 제대로 작동시키기
:set paste "붙여넣기모드,텍스트를 복사 후 vim 에 붙여넣기하면 autoindent, textwidth 등의 값이 설정 되어 있는 경우 계단처럼 들여쓰기 되는 현상이 발생한다. set paste 를 수행하면 autoindent, textwidth 등의 값을 리셋하거나 비활성하여 있는 그대로 붙여넣을 수 있다.
:set shellcmdflag=-ic "vim 에서는 .bashrc 를 로딩하지 않아 :!alias명령을 실행 할 수 없는데 shell 에 -i inertactive 모드로 .bashrc 을 로딩하는 새로운 쉘 생성, -c 뒤에 오는 스트링을 명령으로 처리한다. 옵션을 주어 alias 명령도 실행하도록 한다.
:set tm=1000 또는 :set timeoutlen=1000 "맵핑키 입력 완료까지의 대기시간ms, 기본 1000, ttm<0 이면 키코드(<esc><up><enter>등)도 tm 값으로 대기한다.
:set ttm=50 또는 :set ttimeoutlen=50 "ttm>=0 일때 키코드의 입력 후 대기시간ms, 기본:-1
:set foldmethod=syntax "폴딩시 syntax(기본은 manual)기준으로 하기, syntax 방법은 블럭 지정(수동)으로 폴딩이 안되고, synatx 에 맞게만 폴딩한다.
:set foldenable "파일 오픈시 폴딩
:set nofoldenable "파일 오픈시 폴딩 하지 않기
:let "변수 설정 모두 보기
:let 변수명 또는 :echo 변수명 "변수 값 보기
:let 변수명=값 "내부 변수 설정, g:변수명 전역변수, b:변수명 버퍼변수
:let mapleader="," "leader 키 , 로 설정, 디폴트는 \ => "\\" 로 설정
:verbose set "설정된 모든 옵션 보기
:verbose set 옵션이름 "옵션에 대한 상태 보기, tabstop 옵션 상태 보기 예) :verbose set tabstop
:10, 100 d "10~100번재 행 삭제
:w "저장
:w 파일명 "파일명으로 저장
:w! "강제로 저장
:q! "저장하지 않고 종료
:qall! "저장하지 않고 모든 열려있는 창 종료
:wq "저장하고 종료
:wa "변경파일 모두 저장
:xa "변경파일 모두 저장 후 종료
:%!xxd "%파일전체, !외부명령, xxd 명령 실행, hex 모드) 또는 :%!hexdump -C "hexdump 명령 실행, -C(canonical hex+ASCII) hex 모드
:%!xxd -r "xxd 명령 실행, hex 모드 해제
:g/문자/d "파일 전체에서 문자가 포함된 라인들 모두 삭제
:g/문자/m 0 "파일 전체에서 문자가 포함된 라인들 모두 0번째 아래로 이동
:g/문자/m -2 "파일 전체에서 문자가 포함된 라인들 한줄 위로 이동
:g/문자/m +1 "파일 전체에서 문자가 포함된 라인들 한줄 아래로 이동
:%s/문자//gn "파일전체에서 문자 개수 파악
:s/문자1/문자2/ "현재라인에서 문자1을 문자2로 바꾼다.
:s#문자2#문자2# "구분자를 # 로 사용할 수도 있다.
:s/문자1/문자2/i "대소문자 무시한 문자1을 문자2로 바꾼다.
:%s/문자1/문자2/gc "파일전체범위(%), g 옵션이 없으면 각 라인에서 첫번째로 매칭된는것 하나만 변경된다. c를 붙이면 바꿀때 물어본다.
:%s/\<문자1\>/문자2/ "파일 전체에서 문자1(길이까지 일치)을 문자2로 바꾼다.
:%s/\//문자2/ "/ 자체를 문자2로 변경하기
:%s#/#문자2# "/ 자체를 문자2로 변경하기
:%s/\n/\r\r/ 또는 :%s/\n/ctrl+v 후 엔터입력/ "2줄씩 줄바꿈, 줄바꿈 문자변경시 검색부분은 \n 변경부분 \r 를 사용해야 한다.
:라인번호1,라인번호2s/문자1/문자2/ "라인번1~2 사이에서 문자1 문자2로 바꾼다.
:'<,'>s/.\{2}$// "블록지정 후 :s/.\{2}$//) "블럭지정된 영역의 마직막 2글자 삭제
:map 매핑키 매핑내용 "Normal, Visual, Seclt 모드에서 동작하는 키 매핑, 재귀적 매핑, map a b 과 map b c 로 하면 a -> c 로 매핑될 수 있다. map, noremap 은 Normal, Visual, Select, Operator-pending 모드에서 키 매핑을 사용할 수 있다. :h map-table 참고
:noremap 매핑키 매핑내용 "Normal, Visual, Select 모드에서 동작하는 키 매핑, 비재귀적 매핑
:nmap 매핑키 매핑내용 "Normal 모드에서만 동작하는 키 매핑
:nnoremap 매핑키 매핑내용 "Normal 모드에서만 동작하는 키 매핑, 비재귀
:vmap 매핑키 매핑내용 "Visual, Select 모드에서만 동작하는 키 매핑
:vnoremap 매핑키 매핑내용 "Visual, Select 모드에서만 동작하는 키 매핑, 비재귀
:imap 매핑키 매핑내용 "Insert 모드에서만 동작하는 키 매핑
:inoremap 매핑키 매핑내용 "Insert 모드에서만 동작하는 키 매핑, 비재귀
:cnoreabbrev 매핑키 매핑내용 "Command 모드에서 축약어 매핑, 비재귀
:function 설정된 함수리스트 보기
:scriptnames 설치된 플러그인 리스트 보기
:so ~/.vimrc 또는 :source ~/.vimrc "수정된 vimrc 설정 반영

[profiling]
:profile start vim-profile.log
:profile func *
:profile file *
이제 성능이 느린 액션 수행
:profile pause "잠시 멈춤
:profile continue "다시 시작
:profile stop "stop 해야 파일에 써진다.(또는 vim 종료하면 파일에 써진다.)

[diff 사용]
vimdiff 사용시: vimdiff a.txt b.txt
neovim 사용시: nvim -d a.txt b.txt
vim 에서는 창을 수직 분할 후 각 창에 파일을 로딩 한 다음 :windo difft 로 창들을 diff 윈도우에 포함
:diffget 현재 버퍼 커서의 차이부분 가져오기(대체)
:diffput 현재 버퍼 커서의 차이부분 다른 버퍼에 넣기(대체) 

[mac option(alt,meta) 키 동작 안되는 문제 해결하기]
mac 에선 기본적으로 option 키가 조합되면 특정 문자로 취급된다.
option+a == å
option+d == ∂
option+p == π
사실 option 는 alt 와 다르고, 각 터미널에 따른 설정이 필요하다.
iterm --> option 키 normal --> esc+
kitty --> macos_option_as_alt no
alacritty
--> alt_send_esc: true 는0.12.0 에서 디폴트로 설정에서 제거됨
--> windows > option_as_alt: Both 로 설정함
:h key-notation 참고

[remove trailing whitespace, 라인끝 공백 제거]
% 파일전체범위, s 바꾸기, \s\+ 공백1개이상, $ 끝에서, // 빈값으로, e 에러 메시지 표시하지 않기
:%s/\s\+$//e

[블럭내 변경]
visual 모드에서 v 로 블럭 지정
:입력(자동으로 :'<,'> 로 변경)s/대상문자/변경될문자/g

[블럭내 정렬]
visual 모드에서 v 로 블럭 지정
:입력(자동으로 :'<,'> 로 변경)sort  "정렬
:입력(자동으로 :'<,'> 로 변경)sort! "reverse 정렬
:입력(자동으로 :'<,'> 로 변경)sort u "unique 정렬(중복제거)

[멀티라인 수정]
1. 라인 처음으로 커서를 위치 시키고 블록 모드로 변경 ctrl+v
2. 커서로 아래(또는 j)로 멀티 라인 선택
3. 블럭 첫음에 추가시: I(shift+i)로 첫번째 라인 처음에 문자 insert
또는
블럭 수정(삭제하고 입력모드)시: c 로 수정
또는
블럭 끝에 추가시: $로 모든 라인의 끝까지 선택 후 A(shift+a)로 문자 append
4. esc 하면 선택한 전체 라인 반영
참고로 c로 수정하는것 외 insert/append 시 삭제만 하면 멀티 라인으로 반영되지 않는다.

[멀티 커서(선택)로 리팩토리링(변경)하기]
1. v로 검색할 부분 지정 후 ctrl+n 로 선택하고 다음 찾기, ctrl+x는 스킵, ctrl+p는 현재 선택해제 후 이전 선택으로 이동
2. I 로 insert 모드 시작 또는 c 로 삭제 후 insert 모드 시작
3. 수정 후 esc 로 종료

[블럭단위 찾기]
1. v 로 블록지정
2. y 로 디폴트 레지스터에 저장
3. / 찾기모드 변경
4. ctrl+r " 로 디폴트 레지스터의 내용 붙여넣기

[파일들에서 찾아 변경하기]
1. :Rg ysoftman-apple
2. ysoftman-apple 포함된파일들이 보이고, tab또는ctrl+i 으로 선택/해제(alt+a전체선택, alt+d전체해제)후 엔터치면 quickfix 창이 생기고 선택한 목록들이 보인다.
3. quickfix 내 항목들에 대해 변경 명령을 수행, update 변경된 버퍼 저장
cfdo %s/ysoftman-apple/ysoftman-lemon/gc | update