Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

vimって極めればvscode並のIDEになるんじゃないの?速度はそのままで、キー配置もわかりやすくして。

$
0
0

『なる』

今や、速度的にもSublimeに負けてるvim。
あ、vimmerなんですね(格好付けw)』と笑われる時代になってしまいました。
ずっと仲間だったvimmerも軒並みsublimeか、高機能のvscodeに浮気してる始末。

寂しかった僕は『じゃあvscode並のvimにすればいいじゃん』と思いました。
去っていったvimmerも唸るvimにする為に・・・!

今回は、4年かけて自分が完成したと思い込んでいるvimを、
初心者の方でもコピペ3分で作っていきます。
スクリーンショット 2019-04-08 0.55.05.png
※中央上がエディタ画面、左がディレクトリツリー、右上がターミナル、下がエディタで開いてる機械学習ファイルの実行ログ。全てvimで出してます。

今回は以下の内容を紹介していきます。

  • インサートモードでもマウスでコピーアンドペースト
  • ファイルのツリー表示
  • 16言語の補完(ディレクトリ補完も有)
  • vim画面でプログラム実行/出力
  • vim画面でシェルを開く
  • 各種便利ショートカット
  • 覚えづらいコマンドのショートカット化

まずは必要なライブラリのインストール

terminal
brew update
brew install vim python cmake go mono node rust

vimrcをコピー

vimのカスタマイズは~/.vimrc内に書き込めます。
vi ~/.vimrcで開いて、下のコードをコピーしましょう。

313行あるので、この文をクリックして開いて下さい。
~/.vimrc
" setting
if has('vim_starting')
  set nocompatible
endif

if !filereadable(expand('~/.vim/autoload/plug.vim'))
  if !executable("curl")
    echoerr "You have to install curl or first install vim-plug yourself!"
    execute "q!"
  endif
  echo "Installing Vim-Plug..."
  echo ""
  silent !\curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  let g:not_finish_vimplug = "yes"
  autocmd VimEnter * PlugInstall
endif

" plugin
call plug#begin(expand('~/.vim/plugged'))"" space + ne -> sidebar
Plug 'scrooloose/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'"" ga -> align
Plug 'junegunn/vim-easy-align'"" space + go -> exec script
Plug 'thinca/vim-quickrun'
Plug 'Shougo/vimproc.vim', {'do' : 'make'}"" gcc -> comment
Plug 'tpope/vim-commentary'"" option bar
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'"" auto bracket
Plug 'Raimondi/delimitMate'
Plug 'tpope/vim-surround'"" error detect
Plug 'scrooloose/syntastic'"" delete white space
Plug 'bronson/vim-trailing-whitespace'"" auto complete
Plug 'sheerun/vim-polyglot'
Plug 'Valloric/YouCompleteMe'
Plug 'ervandew/supertab'"" html
Plug 'hail2u/vim-css3-syntax'
Plug 'gorodinskiy/vim-coloresque'
Plug 'tpope/vim-haml'
Plug 'mattn/emmet-vim'"" javascript
Plug 'jelera/vim-javascript-syntax'"" php
Plug 'arnaud-lb/vim-php-namespace'"" python
Plug 'davidhalter/jedi-vim'
Plug 'raimon49/requirements.txt.vim', {'for': 'requirements'}"" space + sh -> vimshell
Plug 'Shougo/vimshell.vim'
call plug#end()
filetype plugin indent on
let mapleader="\<Space>""" youcompleteme
let g:ycm_server_python_interpreter ='/usr/bin/python2.7'let g:ycm_python_binary_path ='/usr/bin/python2.7'let g:ycm_auto_trigger = 1
let g:ycm_min_num_of_chars_for_completion = 1
let g:ycm_autoclose_preview_window_after_insertion = 1
let g:ycm_key_list_select_completion =['<Down>']let g:ycm_key_list_previous_completion =['<Up>']let g:ycm_seed_identifiers_with_syntax = 1
let g:SuperTabDefaultCompletionType ='<C-n>'let g:make ='gmake'if exists('make')let g:make ='make'
endif

"" vim-airline
let g:airline_theme ='powerlineish'let g:airline#extensions#syntastic#enabled = 1
let g:airline#extensions#branch#enabled = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tagbar#enabled = 1
let g:airline_skip_empty_sections = 1

"" nerdtree
let g:NERDTreeChDirMode=2
let g:NERDTreeIgnore=['\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__']let g:NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$']let g:NERDTreeShowBookmarks=1
let g:nerdtree_tabs_focus_on_files=1
let g:NERDTreeMapOpenInTabSilent ='<RightMouse>'let g:NERDTreeWinSize = 30
let NERDTreeShowHidden=1
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite
nnoremap <Leader>dir :NERDTreeTabsToggle<CR>
autocmd BufWritePre * :FixWhitespace

"" quickrun
nnoremap <Leader>go :QuickRun<CR>
let g:quickrun_config={'*': {'split': ''}}"" vim-easy-align
xmap ga <Plug>(EasyAlign)
nmap ga <Plug>(EasyAlign)"" vimshell
"" nnoremap <Leader>sh :VimShellPop<CR>
nnoremap <Leader>sh :vertical terminal<CR>
let g:vimshell_user_prompt ='fnamemodify(getcwd(), ":~")'let g:vimshell_prompt ='$ '"" syntastic
let g:syntastic_always_populate_loc_list=1
let g:syntastic_error_symbol='✗'let g:syntastic_warning_symbol='⚠'let g:syntastic_style_error_symbol ='✗'let g:syntastic_style_warning_symbol ='⚠'let g:syntastic_auto_loc_list=1
let g:syntastic_aggregate_errors = 1

"" jedi-vim
let g:jedi#popup_on_dot = 0
let g:jedi#goto_assignments_command ="<leader>g"let g:jedi#goto_definitions_command ="<leader>d"let g:jedi#documentation_command ="K"let g:jedi#usages_command ="<leader>n"let g:jedi#rename_command ="<leader>r"let g:jedi#show_call_signatures ="0"let g:jedi#completions_command ="<C-Space>"let g:jedi#smart_auto_mappings = 0
let g:jedi#force_py_version = 3
autocmd FileType python setlocal completeopt-=preview

"" syntastic
let g:syntastic_python_checkers=['python', 'flake8']let g:polyglot_disabled =['python']let python_highlight_all = 1

"" vim-airline
let g:airline#extensions#virtualenv#enabled = 1
if!exists('g:airline_symbols')let g:airline_symbols ={}
endif
if!exists('g:airline_powerline_fonts')let g:airline#extensions#tabline#left_sep =' 'let g:airline#extensions#tabline#left_alt_sep ='|'let g:airline_left_sep          ='▶'let g:airline_left_alt_sep      ='»'let g:airline_right_sep         ='◀'let g:airline_right_alt_sep     ='«'let g:airline#extensions#branch#prefix     ='⤴'"➔, ➥, ⎇
  let g:airline#extensions#readonly#symbol   = '⊘'
  let g:airline#extensions#linecolumn#prefix = '¶'
  let g:airline#extensions#paste#symbol      = 'ρ'
  let g:airline_symbols.linenr    = '␊'
  let g:airline_symbols.branch    = '⎇'
  let g:airline_symbols.paste     = 'ρ'
  let g:airline_symbols.paste     = 'Þ'
  let g:airline_symbols.paste     = '∥'
  let g:airline_symbols.whitespace = 'Ξ'
else
  let g:airline#extensions#tabline#left_sep = ''
  let g:airline#extensions#tabline#left_alt_sep = ''
  let g:airline_left_sep = ''
  let g:airline_left_alt_sep = ''
  let g:airline_right_sep = ''
  let g:airline_right_alt_sep = ''
  let g:airline_symbols.branch = ''
  let g:airline_symbols.readonly = ''
  let g:airline_symbols.linenr = ''
endif

"function"" xaml
augroup MyXML
  autocmd!
  autocmd Filetype xml inoremap <buffer> </ </<C-x><C-o>
  autocmd Filetype html inoremap <buffer> </ </<C-x><C-o>
augroup END

"" The PC is fast enough, do syntax highlight syncing from start unless 200 lines
augroup vimrc-sync-fromstart
  autocmd!
  autocmd BufEnter * :syntax sync maxlines=200
augroup END

"" Remember cursor position
augroup vimrc-remember-cursor-position
  autocmd!
  autocmd BufReadPost *if line("'\"")> 1 && line("'\"")<= line("$") | exe "normal! g`\"" | endif
augroup END

"" txt
augroup vimrc-wrapping
  autocmd!
  autocmd BufRead,BufNewFile *.txt call s:setupWrapping()
augroup END
if !exists('*s:setupWrapping')
  function s:setupWrapping()
    set wrap
    set wm=2
    set textwidth=79
  endfunction
endif

"" make/cmake
augroup vimrc-make-cmake
  autocmd!
  autocmd FileType make setlocal noexpandtab
  autocmd BufNewFile,BufRead CMakeLists.txt setlocal filetype=cmake
augroup END

"" python
augroup vimrc-python
  autocmd!
  autocmd FileType python setlocal
      \ formatoptions+=croq softtabstop=4
      \ cinwords=if,elif,else,for,while,try,except,finally,def,class,with
augroup END

" shortcut leader=Space
"" save
nnoremap <Leader>w :w<CR>
nnoremap <Leader>qqq :q!<CR>
nnoremap <Leader>eee :e<CR>
nnoremap <Leader>wq :wq<CR>
nnoremap <Leader>nn :noh<CR>

""split
nnoremap <Leader>s :<C-u>split<CR>
nnoremap <Leader>v :<C-u>vsplit<CR>

"" Tabs
nnoremap <Tab> gt
nnoremap <S-Tab> gT
nnoremap <Leader>t :tabnew<CR>

"" ignore wrap
nnoremap j gj
nnoremap k gk
nnoremap <Down> gj
nnoremap <Up> gk

"" Sft + y => yunk to EOL
nnoremap Y y$"" + => increment
nnoremap + <C-a>

"" - => decrement
nnoremap - <C-x>

"" move 15 words
nmap <silent> <Tab> 15<Right>
nmap <silent> <S-Tab> 15<Left>
nmap <silent> ll 15<Right>
nmap <silent> hh 15<Left>
nmap <silent> jj 15<Down>
nmap <silent> kk 15<Up>

"" pbcopy for OSX copy/paste
vmap <C-x> :!pbcopy<CR>
vmap <C-c> :w !pbcopy<CR><CR>

"" move line/word
nmap <C-e> $
nmap <C-a> 0
nmap <C-f> W
nmap <C-b> B
imap <C-e> <C-o>$
imap <C-a> <C-o>0
imap <C-f> <C-o>W
imap <C-b> <C-o>B

" base
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8
set bomb
set binary
set ttyfast
set backspace=indent,eol,start
set tabstop=4
set softtabstop=0
set shiftwidth=4
set expandtab
set splitright
set splitbelow
set hidden
set hlsearch
set incsearch
set ignorecase
set smartcase
set nobackup
set noswapfile
set fileformats=unix,dos,mac
syntax on
set ruler
set number
set gcr=a:blinkon0
set scrolloff=3
set laststatus=2
set modeline
set modelines=10
set title
set titleold="Terminal"
set titlestring=%F
set statusline=%F%m%r%h%w%=(%{&ff}/%Y)\ (line\ %l\/%L,\ col\ %c)\
set autoread
set noerrorbells visualbell t_vb=
set clipboard+=unnamed,autoselect
set mouse=a
set whichwrap=b,s,h,l,<,>,[,]
highlight Pmenu ctermbg=233 ctermfg=241
highlight PmenuSel ctermbg=233 ctermfg=166
highlight Search ctermbg=166 ctermfg=233
highlight Visual ctermbg=166 ctermfg=233

vimrcをコピーし終わったら、プラグインのインストール

terminal
cd ~/
vim +PlugInstall +qall
cd .vim/plugged/YouCompleteMe/
/usr/bin/python2.7 ./install.py --all

完了!実際にvimを開いてみましょう。

さぁviコマンドで新しい世界に!
実際に実装されてるコマンド一覧を下記してみました。

長いので、この文をクリックして開いて下さい。

* Space + dir⇛ カレントディレクトリのファイルが左に開く。

選択してEnterでファイルが開きます。
選択してTでファイルが別タブに開きます。

  • Space + sh⇛ カレントディレクトリのターミナルが右側に開く。

ここでプログラムを実際に実行したり、grepしたりgitできます。
grep, gitなどのプラグインもありますが、コマンドを覚えるのが面倒です。
ターミナルを開いた方が楽!

  • Space + go⇛ vimで開いているファイルを実行して、下画面にログを出す。

C言語やPythonなど、ファイルを開きながらプログラムを実行できちゃうのです。
プログラミングコンテストなどで必須。

  • コメントアウトしたい行をマウスでもビジュアルでも複数選択して、 gcc

自動コメントアウトしてくれます

  • 文章を綺麗に整えたい複数文章を選択して、 ga(整列したい文字)
test.py
a=2+5aaaa=2+5aaa=2+5# ⇑の3行を選択して、ga=と押すと下のように整理される。a=2+5aaaa=2+5aaa=2+5
  • 適当にファイルを開いて、 ./ と書いてみる

ディレクトリの補完が効いてます

  • 適当にファイルを開いて、普通にプログラムを書いたり、変数を入力

プログラム命令の補完、変数の補完が効いてます

  • Space + w⇛ セーブ。:wと同じです。 

  • Space + qqq⇛ 強制終了。:q!と同じです。

  • Space + wq⇛ セーブ終了。:wqと同じです。

  • Space + t⇛ タブを開く。:tabnewと同じです

  • Shift + y⇛ 文末までの行をコピー

  • +⇛ 数字の上でやると、数字が増えていきます。

  • -⇛ 数字の上でやると、数字が減っていきます。

  • tab(エスケープコードで)⇛ 15文字ずつ右に移動します。

  • Shift + tab(エスケープコードで)⇛ 15文字ずつ左に移動します。

  • emacs/bash風移動

Ctl + e ⇛ 文末まで移動
Ctl + a ⇛ 文頭まで移動
Ctl + f ⇛ 一文字後に移動
Ctl + b ⇛ 一文字前に移動

自分にあったテーマを探す

まずvimのテーマは2種類存在します。
以下が、世に出ている全てのテーマが一覧されているサイトです。

ターミナル自体のテーマ

https://github.com/lysyi3m/macos-terminal-themes

Vim自体のテーマ

https://vimcolors.com/

ちなみに私は、sublimeやatomでも有名なayuというのを使っています。
スクリーンショット 2019-04-07 23.14.57.png

まとめ 「vimは最高なんだ・・・vimは最高なんだ・・・」

vimって操作覚えるのも一苦労だと思うんです。
でも、全ての環境で動くのはvimだけなんです。(emacsはテトリス遊ぶ時だけ使う)

それって最強かつ最高のブランドだと思うんですね。
サーバーが死にかけてる時、「ssh接続してもvim使えないから中のファイル見れない・・・」なんて超ダサい
普段からvimという極限状態の環境に慣れる事で、エンジニアのレベルって上がると思うんです。

これを読んで頂いた方も是非、今日からvimmerの仲間になりましょう!

twitterやってます⇛https://twitter.com/klono_ryuta


Viewing all articles
Browse latest Browse all 5608

Trending Articles