SlideShare une entreprise Scribd logo
1  sur  78
Télécharger pour lire hors ligne
Vi / Vim
ICEWALL 오효근
발표자?
• 잉여잉여한 대학생
• 걍 간지나서 vim을 사용하기 시작
• dd 하나 때문에 IDE를 사용을 못 해먹겠는 체질이 됨
• vim을 쓰겠다는 도전적인 불쌍한 사람들이 많아서 발표
Why Vim?
Learning Curve
Learning Curve
Vi
http://commons.wikimedia.org/wiki/File:Upshot-Knothole_Climax_001.jpg
Learning Curve
ADM3A
http://ko.wikipedia.org/wiki/Vi#/media/File:KB_Terminal_ADM3A.svg
ADM3A
• ESC 위치가 지금 키보드와 달리 Tab에 위치함
• Ctrl의 경우 Caps Lock에 있음 (emacs가 이걸 이용)
• 방향키가 존재 안 함 = hjkl을 방향키처럼 사용
Keyboard?
• 현재 몇몇 키보드는 이 형식을 지원하기도 함
• 미니 키보드 형식으로 ESC가 자판에 가깝게
• Caps Lock <-> Ctrl 교체 등등 지원
태초에 도스창이 있었다
• GUI 아님 / Command Line Interface (== 도스창)
• 마우스가 없었음
• 쓸 수 있는 건 키보드 뿐
태초에 터미널이 있었다
• GUI 아님 / Command Line Interface (== 터미널)
• 마우스가 없었음
• 쓸 수 있는 건 키보드 뿐
태초에 터미널이 있었다
• OS X / Linux 모두 기본적으로 vi 혹은 vim이 탑재
• 터미널을 열고 vi 라고 쳐 보면 바로 열림
• 이 상태 vs 메모장 하면 100% 메모장이 승리함 (진짜 중요)
태초에 터미널이 있었다
• 왜 쓰는지 알게 되는 시점까지 엄청 오래걸림
• vim/터미널은 쓰면 쓸 수록 배울게 많은 편
• 발표자도 모르는 기능 산더미처럼 많음
태초에 터미널이 있었다
• 취향도 많이 타는 편
• IDE와는 상당히 다른 모습을 보여줌
• 근데, Visual Studio에서 vi 명령어 플러그인이 존재 함
Vi / Vim을 써볼까요?
OS X는요?
• 팩키지 관리자 깔기 ( Homebrew / Macports / Fink)
• iTerm2 깐 후, 팩키지 관리자로 MacVim 깔기
• vi ~/.profile 로 터미널 프로파일 수정 (잠시만 배우지도 않은 vi를?)
OS X는요?
• alias vi=“mvim -v”
• alias vim=“mvim -v”
• 이 두 가지 ~/.profile에 추가해두고 시작하는게 편함 (권장)
OS X는요?
• 정말 귀찮다면 기본 터미널에 기본 vi 쓰면 됨
• 맥 사고 Macvim 몰라서 발표자도 생으로 vi 6개월 썼음
• 주변에 이런거 알려주는 사람이 하나도 없으면 이럼 ㅠㅠ
Linux는요?
• 터미널을 연다
• vi를 친다
• 끝
Windows는요?
• gvim을 깐다 (www.vim.org) = 변태
• VM에 리눅스를 올리고 vim을 쓴다 = 왕변태
• 리눅스 서버를 구축하고 SSH로 접속해서 쓴다 = 초변태
Windows는요?
• Visual Studio에 익숙하다면 VsVim을 쓰는 것도 방법
• https://visualstudiogallery.msdn.microsoft.com/
59ca71b3-a4a3-46ca-8fe1-0e90e3f79329
Vi를 구성하는 세 모드들
세 모드들
Command Mode
Bottom-Line Mode Insert Mode
ESC ESC
i o a s: /
세 모드들
• Command Mode : 간단한 명령 입력
• Bottom-Line Mode : 복잡한 명령 입력
• Insert Mode : 편집 모드 (메모장이랑 같음)
세 모드들
• 사실 복잡해 보이지만 간단함
• 편집 중 ESC -> 명령 실행 -> ioas로 편집 모드로 진입
• -> 다시 편집 시작 -> ESC -> 명령 실행 -> (무한반복)
세 모드들
명령 편집
ioas
ESC
Command Mode
Command Mode
https://kldp.org/node/102947
Command Mode
Command Mode
• 대부분의 명령은 조합을 통해서 만들어짐
• 의외로 직관적이고 간편하고 효율적임
• 그러나, 다 외워야한다능
Command Mode
• 주로 쓰는 것들은 한정적임 (그것만 알아도 되긴 함)
✴ 편집모드로 들어가는 키 - i, o, a, s
✴ 각종 텍스트를 주무르는 명령어들
to Insert Mode
to Insert Mode
• i : 제일 많이 쓸 키, 커서부터 바로 쓰기
• o : 다음 라인에 새로 쓰기
• a : 뒤에 덧붙여서 쓰기
• s : 삭제하고 쓰기
to Insert Mode
• I : 라인 처음부터 쓰기
• O : 이전 라인에 새로 쓰기
• A : 줄 끝에 덧붙이기
• S : 줄을 날려버리고 처음부터 쓰기 (쓸 데 꽤 많음)
ESC to command mode
주로 쓰는 것들
• dd = 라인 삭제
• gg = 맨 첫 줄로
• G = 맨 끝 줄로
• > , < = 들여쓰기 한 칸 넣기, 한 칸 빼기
주로 쓰는 것들
• u = 실행취소
• yy = 줄 복사
• p = 붙여넣기
• = = 들여쓰기 자동 정렬
주로 쓰는 것들
• 여기서 주목해야할 것은
✴ shift와의 조합
✴ 숫자와의 조합
✴ 다른 명령어와 조합
주로 쓰는 것들
• Shift와 사용할 경우?
• 뭔가 부가적인 기능이나 방향이 반전 되 있음
• 명령어 외우기 시작하면서 익숙해짐
• o <-> O i <-> I gg <-> G
주로 쓰는 것들
• 숫자 + 단축키 = 숫자 만큼 단축키 실행
• 5gg = 맨 위에서 5칸 아래로 커서 이동
• 5dd = 5줄 삭제
• 5> = 5줄 1칸 들여쓰기
주로 쓰는 것들
• vim쓰는 주된 이유
• 여러 명령어와 조합이 가능하다는 게 장점
• 숫자 + 명령어1 + 명령어2 이런식으로 조합
• 뒤에 나올 bottom-line-mode에서도 동일하게 적용
주로 쓰는 것들
• d = 삭제, w = 단어
• dw = 단어 삭제 (delete word)
• gg = 맨 처음줄로, = = 자동 들여쓰기, G = 맨 끝줄로
• gg=G = 처음부터 끝까지 다시 자동 들여쓰기
:(command)
황무지를 개척하자
• :set nu = 라인 넘버
• :set ai = 엔터 후 들여쓰기
• :colorscheme (scheme name) = 컬러스킴 설정
• :syntax on = 문법 강조 키기
황무지를 개척하자
• :set ts=4 = 탭 사이즈 4로
• :set autoindent = 자동 들여쓰기 키기
• :set smartindent = 자동 들여쓰기 키기 (2)
• :set shiftwidth=4 = 자동 들여쓰기 간격 4로
저장을 해야지!
• :w = write
• :q = quit
• :wq = write & quit
• :q! = quit (force)
저장을 해야지!
• :x == :wq
• :o filename = open filename
• ZZ = 저장 후 나가기
• ZQ = 저장 없이 나가기
쓸만한 것들?
• :sh = 콘솔로 다시 넘어감, exit 치면 다시 vi로 옴
• :!(콘솔 명령어) = 콘솔 명령어 실행
• :!ls = ls를 실행 시키고 보여줌줌
• :r!(콘솔 명령어) = 콘솔 명령어 실행 후 출력을 vi에 삽입
쓸만한 것들?
• :tabnew = 새로운 탭 열기, :o 와 비슷함
• :tabn [n] = n만큼 다음 탭으로
• :tabp [n] = n만큼 이전 탭으로
• :tabs = 탭들 목록 보여주기
Visual Mode
Visual Mode
• 그런거 존재 하나요?
• 쓸 수는 있지만 그렇게 권장을 안 하는 모드
• 마우스 클릭 후 드래그 같은게 비주얼 모드에서 작동
Color Scheme
Color Scheme
Color Scheme
Color Scheme
• 간단하게 말하면 syntax highlight 설정
• /colors 폴더 아래에 컬러 스킴 .vim 파일을 넣으면 됨
• 자작도 가능하나 걍 다운 받는게 정신건강상 좋음
Color Scheme
• OS X의 경우 터미널 컬러 프리셋에 따라서 색 왜곡
• (Linux는 확인 안 해봄)
• git에 돌아다니고 있는 컬러 스킴을 사용할 것!
Color Scheme
• http://cocopon.me/app/vim-color-gallery/
• http://vimcolors.com/
• https://code.google.com/p/vimcolorschemetest/ (비추)
.vimrc?
.vimrc
• 일종의 설정 파일
• vim 제대로 쓰기 위한 기본 중 기본
• 남의 .vimrc를 배껴서 쓰는게 지금은 편하긴 함
.vimrc
• 하지만, 나중에는 직접 다 뜯어 고쳐보는게 좋음
• 앞서 배운 :set 이나 :colorscheme 같은 걸 여기에 기술
• vim이 실행되면서 .vimrc에서 내용을 읽고 설정하는 것
.vimrc
• 설정 없는 vim은 메모장보다 쓸 데가 없음
• 기본적인 설정은 KLDP나 github에 꽤 올라와있음
• vim 메뉴얼을 참고해서 커스텀해도 됨
.vimrc
• 제대로 된 스킴 색을 뽑기 위해,
t_Co=256 / xterm-256color 사용
• colorscheme은 badwolf 사용
• <F5>는 gcc 맵핑 (윈도에서 썼던 흔적)
• Set으로 각종 설정 켜 놓음
• nu = number (줄 번호)
• ai = auto indent (엔터 후 들여쓰기)
.vimrc
• tabstop = space 4개 사이즈로
• showmode = 현재 모드 보여주기
• listchars = 탭 (들여쓰기) 표시
• 보면 알겠지만, 여기저기 복붙한 느
낌이 잘 나고, 윈도 환경에서 쓴 흔
적이 남아있음
• KLDP에 올라온 것을 배낀게 8년이
넘어갔....
Plugins
Plugins
• 사실 플러그인의 존재를 알게 된 건 꽤 근래의 일 (1~2년전?)
• 아니 플러그인도 없이 어찌 vim을 썼는지 발표자도 모름
• 하지만, 플러그인 없이 쓴 기간에도 불편함은 없었음
Plugins
• Gibbon에 있는 Vim 강좌가 괜찮음
• https://gibbon.co/pinda/guide-to-vim
• 사실 지금도 플러그인 쓰는거 손에 꼽음
Plugins
• Vim awesome
• http://vimawesome.com/
• 플러그인 목록, 필요한 것 찾아 쓰면 됨
Power line
https://kldp.org/node/102947
Power line
• tmux powerline 조합을 vim에서 볼 수 있다는 게 장점
• 상당히 이쁘고 가독성도 나쁘지 않은 편
• 속도는 그닥, 정신 없는 듯한 느낌이 있음 (그래서 안 씀)
Vundle
Vundle
• Plugin 관리자
• 패키지 관리자나 git를 써본 경험이 있으면 쉽게 적응
• 2010에 출현, 현재 꽤 널리 퍼진 듯
Vundle
• https://github.com/gmarik/Vundle.vim
• vundle은 git으로 다운 받아서 사용 가능
• Github의 Quick Start를 참조해서 설치하면 됨
Vundle
• $ git clone https://github.com/gmarik/Vundle.vim.git
~/.vim/bundle/Vundle.vim
• vi ~/.vimrc
• Quick Start의 .vimrc 내용 추가
Why (not) Vim?
Why (not) Vim?
• vi는 터미널에 익숙해지기 위한 초석
• 이후, 팩키지 관리자 / 터미널 익숙해지기 쉬움
• ssh 같은 걸 많이 사용하게 되면 어쩔 수 없이 쓰게 됨
Why (not) Vim?
• 손에 익는데 까지도 시간이 상당히 걸림
• vim 사용법과 플러그인은 지속적인 구글링을 해야함
• 실제 사용 햇수랑 실력이랑 비례가 안 되는 듯한 느낌
QnA
• 다음 발표 주제는 리눅스 파이프라인 / 팩키지 관리 / git
• 방학 때 (빡센) 리눅스 스터디를 하는게 어떤가 함
• 리눅스 보다는 전반적인 것에 대한 스터디겠지만...

Contenu connexe

Tendances

Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼mangonamu
 
Virtual Development Environment Setting
Virtual Development Environment SettingVirtual Development Environment Setting
Virtual Development Environment SettingKwangyoun Jung
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chromeJi Hun Kim
 
2017 새싹교실 1교시
2017 새싹교실 1교시2017 새싹교실 1교시
2017 새싹교실 1교시Han Sung Kim
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Han Sung Kim
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기Young D
 
쉽게 쓰여진 Django
쉽게 쓰여진 Django쉽게 쓰여진 Django
쉽게 쓰여진 DjangoTaehoon Kim
 
Go 1.설치와 세팅
Go 1.설치와 세팅Go 1.설치와 세팅
Go 1.설치와 세팅재봉 이
 
문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP동현 조
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu ManualUbuntu Korea Community
 
2015 deploy gate 시작 가이드
2015   deploy gate 시작 가이드2015   deploy gate 시작 가이드
2015 deploy gate 시작 가이드Booseol Shin
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법Young D
 
developing vim plugins with python
developing vim plugins with pythondeveloping vim plugins with python
developing vim plugins with pythonJungsu Heo
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문라한사 아
 
Cruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevCruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevHeo Seungwook
 
xecon-phpfest2014composer
xecon-phpfest2014composerxecon-phpfest2014composer
xecon-phpfest2014composerjhyeon1010
 

Tendances (20)

Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼
 
Ninja
NinjaNinja
Ninja
 
Virtual Development Environment Setting
Virtual Development Environment SettingVirtual Development Environment Setting
Virtual Development Environment Setting
 
High performance networking in chrome
High performance networking in chromeHigh performance networking in chrome
High performance networking in chrome
 
2017 새싹교실 1교시
2017 새싹교실 1교시2017 새싹교실 1교시
2017 새싹교실 1교시
 
Django beginning
Django beginningDjango beginning
Django beginning
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료
 
유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기유연하게 확장할 수 있는 PHP 웹 개발 이야기
유연하게 확장할 수 있는 PHP 웹 개발 이야기
 
쉽게 쓰여진 Django
쉽게 쓰여진 Django쉽게 쓰여진 Django
쉽게 쓰여진 Django
 
Go 1.설치와 세팅
Go 1.설치와 세팅Go 1.설치와 세팅
Go 1.설치와 세팅
 
문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP문돌이가 가르치는 서버사이드 PHP
문돌이가 가르치는 서버사이드 PHP
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual
 
2015 deploy gate 시작 가이드
2015   deploy gate 시작 가이드2015   deploy gate 시작 가이드
2015 deploy gate 시작 가이드
 
티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법티켓몬스터를 위한 PHP 개발 방법
티켓몬스터를 위한 PHP 개발 방법
 
developing vim plugins with python
developing vim plugins with pythondeveloping vim plugins with python
developing vim plugins with python
 
Docker설치
Docker설치Docker설치
Docker설치
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문
 
Php
PhpPhp
Php
 
Cruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevCruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedev
 
xecon-phpfest2014composer
xecon-phpfest2014composerxecon-phpfest2014composer
xecon-phpfest2014composer
 

En vedette

Java 언어와 Eclipse, WindowBuilder를 이용한 GUI 프로그램 작성 1
Java 언어와 Eclipse, WindowBuilder를 이용한 GUI 프로그램 작성 1Java 언어와 Eclipse, WindowBuilder를 이용한 GUI 프로그램 작성 1
Java 언어와 Eclipse, WindowBuilder를 이용한 GUI 프로그램 작성 1MinGi KYUNG
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱Jong Wook Kim
 
151015 lecture-uml-v03
151015 lecture-uml-v03151015 lecture-uml-v03
151015 lecture-uml-v03MinGi KYUNG
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편negabaro
 
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근Benjamin Oh
 
Open technet openstack
Open technet openstackOpen technet openstack
Open technet openstackNalee Jang
 
The beginner’s guide to 웹 크롤링 (스크래핑)
The beginner’s guide to 웹 크롤링 (스크래핑)The beginner’s guide to 웹 크롤링 (스크래핑)
The beginner’s guide to 웹 크롤링 (스크래핑)Eunjeong (Lucy) Park
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 

En vedette (8)

Java 언어와 Eclipse, WindowBuilder를 이용한 GUI 프로그램 작성 1
Java 언어와 Eclipse, WindowBuilder를 이용한 GUI 프로그램 작성 1Java 언어와 Eclipse, WindowBuilder를 이용한 GUI 프로그램 작성 1
Java 언어와 Eclipse, WindowBuilder를 이용한 GUI 프로그램 작성 1
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
151015 lecture-uml-v03
151015 lecture-uml-v03151015 lecture-uml-v03
151015 lecture-uml-v03
 
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편aws/docker/rails를 활용한 시스템 구축/운용 - docker편
aws/docker/rails를 활용한 시스템 구축/운용 - docker편
 
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
 
Open technet openstack
Open technet openstackOpen technet openstack
Open technet openstack
 
The beginner’s guide to 웹 크롤링 (스크래핑)
The beginner’s guide to 웹 크롤링 (스크래핑)The beginner’s guide to 웹 크롤링 (스크래핑)
The beginner’s guide to 웹 크롤링 (스크래핑)
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 

Similaire à Vim 강의

MFC 발견 (1)
MFC 발견 (1)MFC 발견 (1)
MFC 발견 (1)종훈 박
 
eclipse에서 intelliJ IDEA로
eclipse에서 intelliJ IDEA로eclipse에서 intelliJ IDEA로
eclipse에서 intelliJ IDEA로Juntai Park
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들영욱 오
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swiftNAVER D2
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013devCAT Studio, NEXON
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍NDOORS
 
디버거 소개
디버거 소개디버거 소개
디버거 소개JuHong Jeong
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patternsQooJuice
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1Jinkyoung Kim
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼Kenu, GwangNam Heo
 
programming with GDB
programming with GDBprogramming with GDB
programming with GDBNakCheon Jung
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼라한사 아
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개Jong-il Seok
 
Neovim으로 생산성 퀀텀점프하기 by 이재열
Neovim으로 생산성 퀀텀점프하기 by 이재열Neovim으로 생산성 퀀텀점프하기 by 이재열
Neovim으로 생산성 퀀텀점프하기 by 이재열Excelcon
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
Slipp clojure-1212
Slipp clojure-1212Slipp clojure-1212
Slipp clojure-1212완수 양
 
요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지Hyoje Jo
 
LinqPad for DevOps
LinqPad for DevOpsLinqPad for DevOps
LinqPad for DevOps성수 이
 

Similaire à Vim 강의 (20)

MFC 발견 (1)
MFC 발견 (1)MFC 발견 (1)
MFC 발견 (1)
 
eclipse에서 intelliJ IDEA로
eclipse에서 intelliJ IDEA로eclipse에서 intelliJ IDEA로
eclipse에서 intelliJ IDEA로
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
이승재, M2 AI코드 개발 생산성 향상 사례, NDC2013
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
디버거 소개
디버거 소개디버거 소개
디버거 소개
 
Game programming patterns
Game programming patternsGame programming patterns
Game programming patterns
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼
 
programming with GDB
programming with GDBprogramming with GDB
programming with GDB
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
 
버전관리시스템 종류와 소개
버전관리시스템 종류와 소개버전관리시스템 종류와 소개
버전관리시스템 종류와 소개
 
배포
배포배포
배포
 
Neovim으로 생산성 퀀텀점프하기 by 이재열
Neovim으로 생산성 퀀텀점프하기 by 이재열Neovim으로 생산성 퀀텀점프하기 by 이재열
Neovim으로 생산성 퀀텀점프하기 by 이재열
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
Slipp clojure-1212
Slipp clojure-1212Slipp clojure-1212
Slipp clojure-1212
 
요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지요람(CreateProcess)에서 무덤(ResumeThread)까지
요람(CreateProcess)에서 무덤(ResumeThread)까지
 
LinqPad for DevOps
LinqPad for DevOpsLinqPad for DevOps
LinqPad for DevOps
 

Dernier

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 

Dernier (6)

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 

Vim 강의

  • 1. Vi / Vim ICEWALL 오효근
  • 2. 발표자? • 잉여잉여한 대학생 • 걍 간지나서 vim을 사용하기 시작 • dd 하나 때문에 IDE를 사용을 못 해먹겠는 체질이 됨 • vim을 쓰겠다는 도전적인 불쌍한 사람들이 많아서 발표
  • 8. ADM3A • ESC 위치가 지금 키보드와 달리 Tab에 위치함 • Ctrl의 경우 Caps Lock에 있음 (emacs가 이걸 이용) • 방향키가 존재 안 함 = hjkl을 방향키처럼 사용
  • 9. Keyboard? • 현재 몇몇 키보드는 이 형식을 지원하기도 함 • 미니 키보드 형식으로 ESC가 자판에 가깝게 • Caps Lock <-> Ctrl 교체 등등 지원
  • 10. 태초에 도스창이 있었다 • GUI 아님 / Command Line Interface (== 도스창) • 마우스가 없었음 • 쓸 수 있는 건 키보드 뿐
  • 11. 태초에 터미널이 있었다 • GUI 아님 / Command Line Interface (== 터미널) • 마우스가 없었음 • 쓸 수 있는 건 키보드 뿐
  • 12. 태초에 터미널이 있었다 • OS X / Linux 모두 기본적으로 vi 혹은 vim이 탑재 • 터미널을 열고 vi 라고 쳐 보면 바로 열림 • 이 상태 vs 메모장 하면 100% 메모장이 승리함 (진짜 중요)
  • 13. 태초에 터미널이 있었다 • 왜 쓰는지 알게 되는 시점까지 엄청 오래걸림 • vim/터미널은 쓰면 쓸 수록 배울게 많은 편 • 발표자도 모르는 기능 산더미처럼 많음
  • 14. 태초에 터미널이 있었다 • 취향도 많이 타는 편 • IDE와는 상당히 다른 모습을 보여줌 • 근데, Visual Studio에서 vi 명령어 플러그인이 존재 함
  • 15. Vi / Vim을 써볼까요?
  • 16. OS X는요? • 팩키지 관리자 깔기 ( Homebrew / Macports / Fink) • iTerm2 깐 후, 팩키지 관리자로 MacVim 깔기 • vi ~/.profile 로 터미널 프로파일 수정 (잠시만 배우지도 않은 vi를?)
  • 17. OS X는요? • alias vi=“mvim -v” • alias vim=“mvim -v” • 이 두 가지 ~/.profile에 추가해두고 시작하는게 편함 (권장)
  • 18. OS X는요? • 정말 귀찮다면 기본 터미널에 기본 vi 쓰면 됨 • 맥 사고 Macvim 몰라서 발표자도 생으로 vi 6개월 썼음 • 주변에 이런거 알려주는 사람이 하나도 없으면 이럼 ㅠㅠ
  • 20. Windows는요? • gvim을 깐다 (www.vim.org) = 변태 • VM에 리눅스를 올리고 vim을 쓴다 = 왕변태 • 리눅스 서버를 구축하고 SSH로 접속해서 쓴다 = 초변태
  • 21. Windows는요? • Visual Studio에 익숙하다면 VsVim을 쓰는 것도 방법 • https://visualstudiogallery.msdn.microsoft.com/ 59ca71b3-a4a3-46ca-8fe1-0e90e3f79329
  • 23. 세 모드들 Command Mode Bottom-Line Mode Insert Mode ESC ESC i o a s: /
  • 24. 세 모드들 • Command Mode : 간단한 명령 입력 • Bottom-Line Mode : 복잡한 명령 입력 • Insert Mode : 편집 모드 (메모장이랑 같음)
  • 25. 세 모드들 • 사실 복잡해 보이지만 간단함 • 편집 중 ESC -> 명령 실행 -> ioas로 편집 모드로 진입 • -> 다시 편집 시작 -> ESC -> 명령 실행 -> (무한반복)
  • 30. Command Mode • 대부분의 명령은 조합을 통해서 만들어짐 • 의외로 직관적이고 간편하고 효율적임 • 그러나, 다 외워야한다능
  • 31. Command Mode • 주로 쓰는 것들은 한정적임 (그것만 알아도 되긴 함) ✴ 편집모드로 들어가는 키 - i, o, a, s ✴ 각종 텍스트를 주무르는 명령어들
  • 33. to Insert Mode • i : 제일 많이 쓸 키, 커서부터 바로 쓰기 • o : 다음 라인에 새로 쓰기 • a : 뒤에 덧붙여서 쓰기 • s : 삭제하고 쓰기
  • 34. to Insert Mode • I : 라인 처음부터 쓰기 • O : 이전 라인에 새로 쓰기 • A : 줄 끝에 덧붙이기 • S : 줄을 날려버리고 처음부터 쓰기 (쓸 데 꽤 많음)
  • 36. 주로 쓰는 것들 • dd = 라인 삭제 • gg = 맨 첫 줄로 • G = 맨 끝 줄로 • > , < = 들여쓰기 한 칸 넣기, 한 칸 빼기
  • 37. 주로 쓰는 것들 • u = 실행취소 • yy = 줄 복사 • p = 붙여넣기 • = = 들여쓰기 자동 정렬
  • 38. 주로 쓰는 것들 • 여기서 주목해야할 것은 ✴ shift와의 조합 ✴ 숫자와의 조합 ✴ 다른 명령어와 조합
  • 39. 주로 쓰는 것들 • Shift와 사용할 경우? • 뭔가 부가적인 기능이나 방향이 반전 되 있음 • 명령어 외우기 시작하면서 익숙해짐 • o <-> O i <-> I gg <-> G
  • 40. 주로 쓰는 것들 • 숫자 + 단축키 = 숫자 만큼 단축키 실행 • 5gg = 맨 위에서 5칸 아래로 커서 이동 • 5dd = 5줄 삭제 • 5> = 5줄 1칸 들여쓰기
  • 41. 주로 쓰는 것들 • vim쓰는 주된 이유 • 여러 명령어와 조합이 가능하다는 게 장점 • 숫자 + 명령어1 + 명령어2 이런식으로 조합 • 뒤에 나올 bottom-line-mode에서도 동일하게 적용
  • 42. 주로 쓰는 것들 • d = 삭제, w = 단어 • dw = 단어 삭제 (delete word) • gg = 맨 처음줄로, = = 자동 들여쓰기, G = 맨 끝줄로 • gg=G = 처음부터 끝까지 다시 자동 들여쓰기
  • 44. 황무지를 개척하자 • :set nu = 라인 넘버 • :set ai = 엔터 후 들여쓰기 • :colorscheme (scheme name) = 컬러스킴 설정 • :syntax on = 문법 강조 키기
  • 45. 황무지를 개척하자 • :set ts=4 = 탭 사이즈 4로 • :set autoindent = 자동 들여쓰기 키기 • :set smartindent = 자동 들여쓰기 키기 (2) • :set shiftwidth=4 = 자동 들여쓰기 간격 4로
  • 46. 저장을 해야지! • :w = write • :q = quit • :wq = write & quit • :q! = quit (force)
  • 47. 저장을 해야지! • :x == :wq • :o filename = open filename • ZZ = 저장 후 나가기 • ZQ = 저장 없이 나가기
  • 48. 쓸만한 것들? • :sh = 콘솔로 다시 넘어감, exit 치면 다시 vi로 옴 • :!(콘솔 명령어) = 콘솔 명령어 실행 • :!ls = ls를 실행 시키고 보여줌줌 • :r!(콘솔 명령어) = 콘솔 명령어 실행 후 출력을 vi에 삽입
  • 49. 쓸만한 것들? • :tabnew = 새로운 탭 열기, :o 와 비슷함 • :tabn [n] = n만큼 다음 탭으로 • :tabp [n] = n만큼 이전 탭으로 • :tabs = 탭들 목록 보여주기
  • 51. Visual Mode • 그런거 존재 하나요? • 쓸 수는 있지만 그렇게 권장을 안 하는 모드 • 마우스 클릭 후 드래그 같은게 비주얼 모드에서 작동
  • 55. Color Scheme • 간단하게 말하면 syntax highlight 설정 • /colors 폴더 아래에 컬러 스킴 .vim 파일을 넣으면 됨 • 자작도 가능하나 걍 다운 받는게 정신건강상 좋음
  • 56. Color Scheme • OS X의 경우 터미널 컬러 프리셋에 따라서 색 왜곡 • (Linux는 확인 안 해봄) • git에 돌아다니고 있는 컬러 스킴을 사용할 것!
  • 57. Color Scheme • http://cocopon.me/app/vim-color-gallery/ • http://vimcolors.com/ • https://code.google.com/p/vimcolorschemetest/ (비추)
  • 59. .vimrc • 일종의 설정 파일 • vim 제대로 쓰기 위한 기본 중 기본 • 남의 .vimrc를 배껴서 쓰는게 지금은 편하긴 함
  • 60. .vimrc • 하지만, 나중에는 직접 다 뜯어 고쳐보는게 좋음 • 앞서 배운 :set 이나 :colorscheme 같은 걸 여기에 기술 • vim이 실행되면서 .vimrc에서 내용을 읽고 설정하는 것
  • 61. .vimrc • 설정 없는 vim은 메모장보다 쓸 데가 없음 • 기본적인 설정은 KLDP나 github에 꽤 올라와있음 • vim 메뉴얼을 참고해서 커스텀해도 됨
  • 62. .vimrc • 제대로 된 스킴 색을 뽑기 위해, t_Co=256 / xterm-256color 사용 • colorscheme은 badwolf 사용 • <F5>는 gcc 맵핑 (윈도에서 썼던 흔적) • Set으로 각종 설정 켜 놓음 • nu = number (줄 번호) • ai = auto indent (엔터 후 들여쓰기)
  • 63. .vimrc • tabstop = space 4개 사이즈로 • showmode = 현재 모드 보여주기 • listchars = 탭 (들여쓰기) 표시 • 보면 알겠지만, 여기저기 복붙한 느 낌이 잘 나고, 윈도 환경에서 쓴 흔 적이 남아있음 • KLDP에 올라온 것을 배낀게 8년이 넘어갔....
  • 65. Plugins • 사실 플러그인의 존재를 알게 된 건 꽤 근래의 일 (1~2년전?) • 아니 플러그인도 없이 어찌 vim을 썼는지 발표자도 모름 • 하지만, 플러그인 없이 쓴 기간에도 불편함은 없었음
  • 66. Plugins • Gibbon에 있는 Vim 강좌가 괜찮음 • https://gibbon.co/pinda/guide-to-vim • 사실 지금도 플러그인 쓰는거 손에 꼽음
  • 67. Plugins • Vim awesome • http://vimawesome.com/ • 플러그인 목록, 필요한 것 찾아 쓰면 됨
  • 69. Power line • tmux powerline 조합을 vim에서 볼 수 있다는 게 장점 • 상당히 이쁘고 가독성도 나쁘지 않은 편 • 속도는 그닥, 정신 없는 듯한 느낌이 있음 (그래서 안 씀)
  • 71. Vundle • Plugin 관리자 • 패키지 관리자나 git를 써본 경험이 있으면 쉽게 적응 • 2010에 출현, 현재 꽤 널리 퍼진 듯
  • 72. Vundle • https://github.com/gmarik/Vundle.vim • vundle은 git으로 다운 받아서 사용 가능 • Github의 Quick Start를 참조해서 설치하면 됨
  • 73. Vundle • $ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim • vi ~/.vimrc • Quick Start의 .vimrc 내용 추가
  • 75. Why (not) Vim? • vi는 터미널에 익숙해지기 위한 초석 • 이후, 팩키지 관리자 / 터미널 익숙해지기 쉬움 • ssh 같은 걸 많이 사용하게 되면 어쩔 수 없이 쓰게 됨
  • 76. Why (not) Vim? • 손에 익는데 까지도 시간이 상당히 걸림 • vim 사용법과 플러그인은 지속적인 구글링을 해야함 • 실제 사용 햇수랑 실력이랑 비례가 안 되는 듯한 느낌
  • 77. QnA
  • 78. • 다음 발표 주제는 리눅스 파이프라인 / 팩키지 관리 / git • 방학 때 (빡센) 리눅스 스터디를 하는게 어떤가 함 • 리눅스 보다는 전반적인 것에 대한 스터디겠지만...