====== Vim ======
[[http://www.vim.org|Vim]]에 관해 정리한다.
* [[vim:windows|Vim for Windows]]
* [[http://www.vimgolf.com/|Vim Golf]]
* [[https://keycombiner.com/collections/vim/winlinux/|Vim Keyboard Shortcuts]]
===== .vimrc 정리하기 =====
* [[http://vim.wikia.com/wiki/Open_vimrc_file|Open vimrc file]] ''vim''을 실행하고 ''version'' 명령을 내리면 설정파일의 기본 위치와 파일명을 확인할 수 있다.
:version
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
# 경로 확인
:echo $HOME
:echo $VIM
# 즉시 편집
:e $MYVIMRC
:e $MYGVIMRC
* [[https://gist.github.com/kwon37xi/f8d79278899ae1b5bdf5|My Vim Config]]
* [[http://yanpritzker.com/2012/01/20/the-cleanest-vimrc-youve-ever-seen/|The cleanest vimrc you've ever seen]]
* 설정을 모두 ''.vimrc''에 때려넣지 말고 ''~/.vim/plugin/settings/gui.vim'' 처럼 **''~/.vim/plugin/settings/*.vim''**으로 기능별 파일로 분리하여 넣도록 하고, ''.vimrc''는 간결하게 유지하라.
* vim plugin 인 등의 파일이 존재하느 위치 확인
:help runtimepath
Unix: "$HOME/.vim,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
$HOME/.vim/after"
PC, OS/2: "$HOME/vimfiles,
$VIM/vimfiles,
$VIMRUNTIME,
$VIM/vimfiles/after,
$HOME/vimfiles/after"
===== GVim =====
* [[http://vim.wikia.com/wiki/Maximize_or_set_initial_window_size|Gvim 창 최대로 실행 혹은 시작시 창크기 지정]]
*
" 시작시 줄수/컬럼수 지정 : lines와 columns 값을 매우 크게 지정해도 화면을 넘어가지 않게 자동 조정된다.
set lines=50 columns=100
===== 파일이 존재할 경우 설정 읽어들이기 =====
''~/.vimrc_pc''라는 파일이 존재하면 해당 파일을 읽어 들인다. [[https://www.dropbox.com/referrals/NTEzODMxNDQ5OQ|DropBox]]를 통해 설정 파일을 동기화 하면서, 각 PC별로 따로 설정을 저장하고 읽어들이는데 사용한다.
if (filereadable($HOME . "/.vimrc_pc"))
:source $HOME/.vimrc_pc
endif
===== ~/.vimrc 설정 다시 적용 reload =====
* 현재 화면에 ''.vimrc'' 파일을 열고 있는 상태라면 '':so %'' : 현재 열고 있는 파일을 source로 읽으라는 의미
* 일반적인 상황에서는 '':so $MYVIMRC''
===== 환경변수 확인 =====
* [[http://superuser.com/questions/86246/where-should-vimrc-file-be-located-on-windows-7|Where should .vimrc file be located on Windows 7?r]] 참조
:version
:echo expand('~')
:echo $HOME
:echo $VIM
:echo $VIMRUNTIME
===== GUI 환경에서만 설정 적용 =====
if has("gui_running")
...
endif
===== GUI 환경에서 글꼴 설정 =====
* [[http://vim.wikia.com/wiki/Setting_the_font_in_the_GUI|GVIM의 글꼴 설정 문자열을 어떻게 지정해야 할지 혼란스러울 때 이 방법]]을 사용한다.
* '':set guifont=*'' : 명령을 실행하면 글꼴을 선택해서 즉시 지정하는게 가능하다. 일단 이렇게 원하는 글꼴을 지정한 뒤에
* '':set guifont='' : nocompatible 모드일 경우 키를 누르면 현재 지정된 글꼴 문자열이 자동으로 나오게 된다. 해당 문자열을 설정파일의 글꼴 설정부분에 set guifont=XXX 형태로 넣어주면 된다.
* compatible 모드일 경우 대신 를 누른다.
* Windows 에서는 글꼴을 지정하는 설정 파일이 ANSI로 저장돼 있어야만 한다. 설정 파일의 인코딩을 ''set fileencoding=cp949'' 로 지정한다.
===== 키보드 화살표 사용금지 =====
inoremap
inoremap
inoremap
inoremap
===== HTML을 브라우저에서 바로열기 =====
* http://stackoverflow.com/questions/8708154/open-current-file-in-web-browser-in-vim
" firefox, chrome, opera 등이 PATH에 잡혀 있어야하며, 실행파일명이 다를경우 보정해 주어야 한다.
" *nix 계열에서는 명령어 끝(% 뒤)에 & 기호를 붙여준다.
nnoremap wf :exe ':silent !firefox %'
nnoremap wc :exe ':silent !chromium-browser %'
nnoremap wo :exe ':silent !opera %'
nnoremap wi :exe ':silent !iexplore %'
===== Vim 정리 =====
* [[vim:tips|Vim Tips]]
* [[vim:explore|디렉토리 탐색 시작]]
* [[vim:window|Vim의 창(Window) 제어]]
* [[vim:cheatsheet]]
* {{:vimqrc.pdf|Vim Quick Reference}}
* [[vim:buffer]]
* [[vim:indent|Vim과 Indent]]
* [[vim:insertmode]]
* [[vim:text_object]]
* [[vim:script]]
===== Plugins =====
* 플러그인 설치후 플러그인 도움말을 보려면 다음을 실행한다.
*
:helptag ~/.vim/doc
* [[http://vimawesome.com/|VimAwesome]] Awesome Vim plugins
* [[vim:tags]]
* [[vim:localvimrc]]
* [[vim:minibufexplorer]]
* [[vim:bufexplorer]]
* [[vim:NERDTree]]
* [[vim:FuzzyFinder]]
* [[vim:html]]
* [[vim:matchit]]
* [[vim:closetag]]
* [[vim:xmledit]]
* [[vim:javascript]]
* [[vim:grep_plugin]]
* [[vim:clojure]]
* [[vim:python]]
* [[vim:java]]
* [[vim:snipmate]]
* [[vim:align]]
* [[vim:delimitmate]]
* [[vim:vcscommand]]
* [[vim:markdown]]
* [[vim:NERDCommenter]]
* [[vim:conque]]
* [[vim:indentLine]]
* [[vim:gundo]]
* [[http://www.vim.org/scripts/script.php?script_id=1697|Surround]]
* [[http://www.vim.org/scripts/script.php?script_id=3113|format.vim]] : 현재 파일을 HTML,BBcode 혹은 직접 작성한 플러그인에 따른 포맷으로 변환해준다(색을 입히고, vimdiff 결과를 알아보기 좋은 HTML로 만들어 줄 수 있다).
* [[https://github.com/ap/vim-css-color|Vim CSS Color]]
* [[https://github.com/KabbAmine/vCoolor.vim|vCooler]]
* [[http://www.vim.org/scripts/script.php?script_id=3224|VIM Color Picker - A simple color picker for VIM, based on GTK color chooser dialog.]]
* [[https://github.com/sheerun/vim-polyglot|Vim Polyglot]]
* [[https://github.com/Shougo/vimshell.vim|vimshell]]
* [[http://www.vim.org/scripts/script.php?script_id=4996|AdvancedDiffOptions - Additional diff options and commands to manage them. : vim online]]
* [[https://github.com/wincent/terminus|Terminus]] terminal integration
===== Shell VI Key Binding =====
* bash ''~/.bashrc''
set -o vi
* python/Django shell ''~/.editrc''
bind -v
* [[http://stackoverflow.com/questions/10394302/how-do-i-use-vi-keys-in-ipython-under-nix|python - How do I use vi keys in ipython under *nix?]] ''~/.ipython/profile_default''
c.TerminalInteractiveShell.editing_mode = 'vi'
* ''readline'' 사용하는 애플리케이션 공통(ipython 등 포함) ''~/.inputrc''
set editing-mode vi
set keymap vi
set convert-meta on
===== 취약점 =====
==== 특정 파일 오픈시 modeline으로 명령 실행가능 ====
* [[https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md|security/2019-06-04_ace-vim-neovim.md at master · numirias/security]]
* ''8.1.1365'' 이상 버전으로 업그레이드 하거나
* 그게 안되면 다음 설정을 ''~/.vimrc''에 추가
set modelines=0
set nomodeline
==== symbol 사라짐 문제 ====
* [[vim:json|Vim JSON]], [[vim:markdown|Vim Markdown]] 등을 편집할 때, highlight 기능 때문에 따옴표가 사라지거나 볼드체 등을 나타내는 기호등이 사라지는 현상이 발생한
* [[https://vi.stackexchange.com/questions/7258/how-do-i-prevent-vim-from-hiding-symbols-in-markdown-and-json|syntax highlighting - How do I prevent vim from hiding symbols in markdown and json? - Vi and Vim Stack Exchange]]
* [[https://johngrib.github.io/wiki/vim-conceallevel/|conceallevel (Vim)]]
* 일시적 변경
:set conceallevel=0
* 영구적 변경 [[https://vi.stackexchange.com/questions/12520/markdown-in-neovim-which-plugin-sets-conceallevel-2|Markdown in Neovim: which plugin sets conceallevel=2?]] : 설정파일에서 설정해도 자꾸 ''conceallevel''이 변경된다면 ''verbose set conceallevel''로 어느 플러그인에서 변경했는지 확인가능
" indentLine 플러그인이 자꾸 concealLevel을 변경하기 때문에 함께 설정 필요
" 다른 플러그인에서도 강제 변경이 이뤄진다면 설정 필요할 수 있음
let g:indentLine_setConceal = 0
set conceallevel=0
===== 단축키 매핑확인 =====
* '':verbose 모드 키'' 명령으로 해당 키에 해당 모드에서 단축키가 할당돼 있는지, 어느 설정파일/플러그인에서 할당했는지를 확인할 수 있다.
# :verbose 모드 키
:verbose imap
===== 관련 자료 =====
* [[http://www.openvim.com/|OpenVim]] Vim Tutorial
* [[https://github.com/mhinz/vim-galore|Vim Galore]]
* [[http://www.yolinux.com/TUTORIALS/LinuxTutorialAdvanced_vi.html|VI and VIM editor: Tutorial and advanced features]]
* [[http://vim.wikia.com/wiki/Vim_Tips_Wiki|Wikia Vim Tips]]
* [[http://www.ibm.com/developerworks/views/linux/libraryview.jsp?end_no=100&lcl_sort_order=asc&type_by=Articles&sort_order=desc&show_all=false&start_no=1&sort_by=Title&search_by=scripting+the+vim+editor&topic_by=All+topics+and+related+products&search_flag=true&show_abstract=true|Scripting The Vim Editor]]
* [[http://www.ibm.com/developerworks/kr/library/l-vim-script-1/index.html|Scripting the Vim editor, Part 1: Variables, values, and expressions]]
* [[http://www.ibm.com/developerworks/kr/library/l-vim-script-2/index.html|Scripting the Vim editor, Part 2: User-defined functions]]
* [[http://www.ibm.com/developerworks/linux/library/l-vim-script-3/index.html|Scripting the Vim editor, Part 3: Built-in lists]]
* [[http://www.ibm.com/developerworks/kr/library/l-vim-script-4/index.html|Scripting the Vim editor, Part 4: Dictionaries]]
* [[http://www.ibm.com/developerworks/kr/library/l-vim-script-5/index.html|Scripting the Vim editor, Part 5: Event-driven scripting and automation]]
* [[http://jmcpherson.org/editing.html|Efficient Editing With vim]]
* [[http://www.stimuli.com.br/trane/2009/sep/19/how-i-learn-stop-worrying-and-love-vim/|How I learn stop worrying and love VIM]]
* [[http://www.linux.com/archive/feed/54936|Using Vim mappings and abbreviations]]
* [[http://stackoverflow.com/questions/3776117/vim-what-is-the-difference-between-the-remap-noremap-nnoremap-and-vnoremap-map|map과 noremap의 차이점]]
* map 매핑은 매핑의 결과가 recursive하게 수행된다.
* noremap은 매핑의 결과가 한 단계에서 끝난다.
* [[http://vim.runpaint.org/|Vim Recipes Free book]]
* [[http://www.ibm.com/developerworks/kr/aix/library/au-vimplugin/index.html|Vim 사용자 정의 플러그인 개발]]
* [[http://css.dzone.com/articles/how-write-vim-plugins-python|How to Write Vim Plugins with Python]]
* [[http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtml|Vim Regular Expressions]]
* [[http://net.tutsplus.com/sessions/vim-essential-plugins/|Vim essential Plugins]]
* [[http://www.ibm.com/developerworks/kr/aix/library/au-customize_vi/index.html|vi 및 Vim 편집기 사용자 정의하기]]
* [[http://www.infoq.com/presentations/Vim-From-Essentials-to-Mastery|Vim from essentials to mastery]]
* [[http://bytefluent.com/vivify/|Bytefluent Vivify]]
* [[http://code.google.com/p/vimcolorschemetest/|vimcolorschemetest - Vim Color Scheme Test - Google Project Hosting]]
* [[http://vim-wiki.mawercer.de/wiki/index.html|Vim Wiki]]
* [[http://vimcasts.org/|VimCast]] Vim 관련 Screencasts
* [[http://usevim.com/|UseVim]]
* [[http://vim.watch/|Vim.watch]]
* [[http://xmodulo.com/turn-vim-full-fledged-ide.html|How to turn Vim into a full-fledged IDE - Xmodulo]]
* [[http://www.rayninfo.co.uk/vimtips.html|Best of Vim tips]]
* [[https://blog.chann.kr/vim-study-list/|Vim을 배우는 방법들]]
* [[https://medium.com/@schtoeffel/you-don-t-need-more-than-one-cursor-in-vim-2c44117d51db#.vk5ga5kzi|You don’t need more than one cursor in vim — Medium]]
* [[http://superuser.com/questions/302186/vim-scrolls-very-slow-when-a-line-is-too-long|macvim - vim scrolls very slow when a line is too long - Super User]]
* [[http://vim-bootstrap.com/|Vim Bootstrap]] 기본 설정파일 생성기
* [[https://www.reddit.com/r/vim/comments/4dlacf/vim_essentials_articles_videos_ressources/|Vim Essentials]]
* [[https://vimebook.com/en|VimBook]]
* [[http://vim.wikia.com/wiki/Avoid_the_escape_key|Avoid the escape key | Vim Tips Wiki]]
* [[https://nolboo.kim/practical-vim/|Practical Vim 정리 요약]]
* [[https://johngrib.github.io/wiki/vim-auto-completion/?fbclid=IwAR2wX16xJ6eGj7vZqBBiGQdaQlUqj6_9Tzq7FY05iFkivah2j_s3YYXnNbU|vim 자동완성 기능 사용하기 - 기계인간 John Grib]]
* [[https://gist.github.com/csswizardry/9a33342dace4786a9fee35c73fa5deeb|Vim without NERD Tree or CtrlP]]
* [[https://danielmiessler.com/study/vim/|Learn vim For the Last Time: A Tutorial and Primer | Daniel Miessler]]
* [[https://blog.koriel.kr/where-vim-came-from/|Vim은 어디서 왔나]]
* [[https://github.com/neoclide/coc.nvim|akrawchyk/awesome-vim: The Vim plugin shortlist]]
* [[https://www.youtube.com/watch?v=CcgO_CV3iDo|(1) Vim as IDE: Demo - YouTube]]
* [[https://www.moolenaar.net/habits.html|Vim: Seven habits of effective text editing]]
* [[https://edward0im.github.io/technology/2020/09/17/vim/|(Linux) Vim 에디터 다양한 기능 설명 및 C++/Python 개발환경설정 · Edward Im]]
* [[https://vim.rtorr.com/|Vim Cheat Sheet]]
* [[https://vimtricks.com/|Vim Newsletter - VimTricks]]