vimって極めればvscode並のIDEになるんじゃないの? - 最強のvimrcを晒す。

『なる』

今や、速度的にも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'))
Plug 'mattn/vim-starwars'
"" space + ne -> sidebar
Plug 'scrooloose/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'
"" ga -> align
Plug 'junegunn/vim-easy-align'
"" space + qr -> 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'
"" auto format
Plug 'Chiel92/vim-autoformat'
"" 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'
"" snippet
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
call plug#end()
filetype plugin indent on
let mapleader="\<Space>"

"" ultisnip
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
let g:UltiSnipsEditSplit="vertical"

"" youcompleteme
let g:ycm_server_python_interpreter = '/usr/bin/python2.7'
let g:ycm_python_binary_path = '/usr/bin/python2.7'
let g:ycm_global_ycm_extra_conf = '~/.vim/plugged/YouCompleteMe/.ycm_extra_conf.py'
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>']
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "ᐅ"
let g:ycm_key_list_stop_completion = ['<C-y>', '<Enter>']
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

"" auto-format
au BufWrite * :Autoformat

"" 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

"" emmet
autocmd FileType html imap <buffer><expr><tab>
            \ emmet#isExpandable() ? "\<plug>(emmet-expand-abbr)" :
            \ "\<tab>"

"" 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
augroup NERD
    au!
    autocmd VimEnter * NERDTree
    autocmd VimEnter * wincmd p
augroup END

"" quickrun
nnoremap <Leader>go :QuickRun<CR>
nnoremap <C-U>qr :QuickRun<CR>
let g:quickrun_config={'*': {'split': ''}}
let g:quickrun_config.cpp = {
            \   'command': 'g++',
            \   'cmdopt': '-std=c++11'
            \ }

"" 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,<,>,[,]

" template
augroup templateGroup
    autocmd!
    autocmd BufNewFile *.html :0r ~/vim-template/t.html
    autocmd BufNewFile *.cpp :0r ~/vim-template/t.cpp
    autocmd BufNewFile *.py :0r ~/vim-template/t.py
augroup END
" snippet
let g:UltiSnipsSnippetDirectories=["~/vim-snippets/"]

@EqualL2 さん情報
リンターチェックは現在はsyntasticよりも下記のプラグインの方が高性能でした。
ALE
インストールされる際は、下記を追記してください。

~/.vimrc
Plug 'w0rp/ale'

@yoddy さん情報
上記vimrcには、hjklバインドのショートカットを入れております。
そのため、通常hjklを使用されている方には動作不具合となるというお声がいくつかございましたので、同様にお困りの方は下記部分を削除してご使用ください。

~/.vimrc
nmap <silent> ll 15<Right>
nmap <silent> hh 15<Left>
nmap <silent> jj 15<Down>
nmap <silent> kk 15<Up>

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 + 5
aaaa = 2 + 5
aaa = 2 + 5

# ⇑の3行を選択して、ga=と押すと下のように整理される。
a    = 2 + 5
aaaa = 2 + 5
aaa  = 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 ⇛ 一文字前に移動

WSLなどでエラーを吐く場合

10/8追記 @htnabe さん情報
おそらくyoucompletemeプラグインの関係で正常動作しない可能性があります。
その際は下記記事を参考に、.vimrcでycm serverのパスをpython2.7からpython3.〇のようにpythonのバージョンに合わせてください。
https://qiita.com/TsutomuNakamura/items/2fc8aa6c0feaf31c86e4

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

まず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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
問題のあるコメントを報告する

vscodeをvimキーバインドに変更して使ってます。

問題のあるコメントを報告する

@shiracamus さん
出ましたね!vimからvscodeに移行した人!!
戻ってきてくださいよ、、、

問題のあるコメントを報告する

デバッグするときだけvscode、それ以外は拡張機能なしの素のvim使いです。

問題のあるコメントを報告する

VSCodeの拡張機能Vimで事足ります。
Vim向けの拡張機能を使いたい場合かCUIしか使えない環境でない限り。

問題のあるコメントを報告する

@s4i さん
いや本当もう仰る通りです、、、

vscodeで事足りるんですよ、でも!
ターミナルで直で触ってる感じとか
これをサーバー上で動かせる醍醐味とかいっぱいいっぱいvimにしかない魅力もあるんです!!!

問題のあるコメントを報告する

terminal上でvscodeは起動できないですが、vimならterminal上で起動出来ますし
screen, tumx上で動くのはvimのメリットですよね。
なのでずっとvimで開発しています

問題のあるコメントを報告する

@zenpou さん
まさに仰るとおりなんです!

そこがメリットであり、
そこが最強に格好良いブランドって思ってます!

そこに惚れたから、4年もかけてここまでカスタマイズしたので・・・
僕もこれからもvimです!

問題のあるコメントを報告する

ターミナルVim→VSCode(Vim)を経て最近またターミナルVimに戻ってきた勢です。
タイムリーなので助かりますー
参考にさせていただきます(^^)

問題のあるコメントを報告する

@joe_hirata さん
おかえりなさいませ!
vimの魅力の再発見のきっかけになれたら幸いです!

問題のあるコメントを報告する

vim歴半年ほどの素人Vimmerです.

Pluginとかはよくわかっていないので素Vimしているのですが,インストールの手間以上に便利でしょうか?

現在はvimrcに
- 基礎的な設定
- Pythonのスクリプト実行・コメントアウト・アンコメントアウト
- C++のビルド(make)・実行(make run)・コメントアウト・アンコメントアウト
程度を記述して軽く使っています.

This comment has been deleted for violation of our Terms of Service.
問題のあるコメントを報告する

@ysuzuki19 さん
コメントありがとうございます。

「vimはとても学習コストが大きい」
「カスタマイズした結果、他のエディタよりも大きなメリットがあるわけではない」

という風に考えており、答えとしては「便利にはなるが、他のエディタを使ったほうが速い」となります。

今回の記事では、vimでもここまでできるという事を広める事で、「vimは時代遅れの化石」という認識を無くしたかったことにあります。
よほど好きでないと意味のない記事ではあったと思います・・・

問題のあるコメントを報告する

今から始めるならリンターはsyntasticよりALEを使った方がよいかと思います。
(Vim8/neovimの非同期処理を利用しているので古いVimでは動かないかもしれませんが)

問題のあるコメントを報告する

@EqualL2 さん
コメントありがとうございます。

20170925_vimale.jpg

うわーこれは見やすいですね!
非同期処理のいいところって大きなファイルの場合に、気軽にリンターチェックできるところなんですよね。
同期処理だとセーブ時にしかできない&操作できない

情報ありがとうございます。
記事の方に追記致します!

問題のあるコメントを報告する

@ryuta69
お返事ありがとうございます.

僕もvimが好きなので,なんだか嬉しいです!

確かに,「vimは学習コストが高い」わかる気がします.数ヶ月使ってから「こんなコマンドあったんだ」というのもいくつかありましたし,vimrcなどによる設定も最初はよくわからなかったです.

しかし,「他のエディタよりもショートカットキーを設定しやすい」というメリットもあると思います.vimrcにショートカットを記述してすぐに適用できる点も素晴らしいです.
調べると色々な設定がすでにネットにUPされている点でも便利だと思います.

VSCode-vimも使ってみたのですが,:eコマンドが使えなかった気がします.
私がプログラミングをする場合は,自分で作成した過去のソースコードのパーツを参照したりコピーしたりする機会が多いのですが,VSCode-vimではキーボードのみでできなそうなのに対し,vimであれば楽にキーボードのみでできるので,便利だと思います.
また,ROSを使う際にもtmuxでターミナルをたくさん起動することが多いようなので,vimが大変便利だと思います.ROS説明本にも「vimやemacsを使おう!」と書かれているのをみたことがあります.

そのように,まだまだvimの方が便利である場合は多いと思います!

問題のあるコメントを報告する

@ysuzuki19 さん
おお!vimmerの方だったんですね!
とっても嬉しいです!

そうなんですよね、どうしても他のエディタでvimは再現はできませんよね
ターミナルを開いた状態だとやっぱりvimが一番便利で身近な気がしています!

問題のあるコメントを報告する

最近DevOpsばかりなので、サーバに入って直接触ることがなくなりました。でもその情熱いいですね!!

問題のあるコメントを報告する

神記事!ありがとうございます!
質問なのですが、「Space + sh ⇛ カレントディレクトリのターミナルが右側に開く」
でターミナルから編集中のファイルにコマンドで移動することは可能でしょうか?

問題のあるコメントを報告する

viは絶対入っていると信じていたのですが、
dockerのミニマムなコンテナの中ではviやnanoすら使えないことがあるのですが、
そんなときでも使えるエディタはあるのでしょうか

問題のあるコメントを報告する

vimとてもいいですよね〜〜!自分もvim歴1年ぐらいの若輩者ですが触っていて楽しくて仕方がありません。
fzfというFuzzy検索ツールはもうお試しになられました?
fzf x vimのbuffer機能の組み合わせは私的にはタブを使うよりも捗ると感じたのでおすすめです!

問題のあるコメントを報告する

@k-hotta さん
コメントありがとうございます。

そうですよね、触る機会というか見る事すら少なくなっていってますよね・・・
愛よりも固執に近いのでしょうか・・・

問題のあるコメントを報告する

@shoooooo さん
コメントありがとうございます。

①別画面をダブルクリックする
②Ctr + wで別画面に移動する
③ターミナル画面でexitと押して閉じる

これらの方法で移動する事が可能です!

問題のあるコメントを報告する

@WaToIさん
そのレベルだと、最早エディタをインストールする所から始まるのではないでしょうか・・・・?
勉強不足で申し訳ないです・・・

問題のあるコメントを報告する

@2357gi さん
コメントありがとうございます。
fzf便利ですよね!実は以前、いれていたのです。

ですが、vim8からターミナルを直に開けるようになって、個人的にはターミナル上でファイル検索とかできれば十分だな・・・と思ったのと
コマンドを覚えられなかったので消してしまいました・・・

非同期でとても使いやすかった記憶はあります!
今回入れておらず、申し訳ありません。。。ですがオススメですよね!

問題のあるコメントを報告する

@ryuta69
ですよね。ずれた質問をしてしまい申し訳ありません。

問題のあるコメントを報告する

長いの編集する時は emacsで、短ければ vimだなぁ。IDEは使い方が難しくて、Xcodeのみ。
macOSは emacsキーバインドだから使いやすいよね! #隙自語

問題のあるコメントを報告する

@qiitarou さん
コメントありがとうございます
そうですね、確かにmacOSというかbashってCtr + aとかemacsキーバインドですもんね!

今回の記事は、そのカーソル移動だけvimもemacsライクにしてます(笑)

問題のあるコメントを報告する

私は、今からプログラミングを始める人にはIDEを推しますね。

私はVimを使い続けますが!使ってて楽しいので。
意地悪でも独り占めしたいのでもなく、Vimの操作感が素晴らしすぎてVim以外で入力するとストレスが溜まるようになってしまったので、他のエディタを使わざるを得ない場合に困るんですよね。
vscodeは未経験ですが、AtomやVSでVimプラグインを試した限りは似て非なるものという感覚でした。6割くらいはストレス軽減できてるとは思います。

問題のあるコメントを報告する

@minanon さん
コメントありがとうございます。

なるほど、利便性云々ではなく、vimに慣れた時に他のエディタを使うと違和感を感じる障害が起きるわけですね
確かに似ていてはいるけれども、実際のところマーキングも出来なかったり違う物ですよね・・・

問題のあるコメントを報告する

これだけしてやっと肩を並べるとは、
恐るべしVScode!笑

問題のあるコメントを報告する

space+goでpython3で実行することってできますか?

問題のあるコメントを報告する

@shoooooo さん
はい、すみません、環境変数でデフォルトpython3でないと2で実行されてしまうようですね。
こちらをvimrcに追記してください。

~/.vimrc
let g:quickrun_config = {
  \ 'python': {
  \   'command': 'python3'
  \ },
問題のあるコメントを報告する

大変素晴らしい記事をありがとうございます。
Mac環境での記事だとは思いますが、Ubuntuで同じようにできますでしょうか?
というか、試しにやってみましたが、色々挙動が怪しいので、無理なのかな、と…
例えば、スペース+dirでカレントディレクトリを開いてから、選択は矢印キーでするしかないのでしょうか?

問題のあるコメントを報告する

@yoddy さん
コメントありがとうございます。
申し訳ありません、「挙動がおかしい」と思われる数点に関してここでお答え致します。

おそらく
①画面移動ができない → こちらはctl + wの、vimの標準機能で、分割画面上を移動する事ができます。その後、hjkl矢印でファイル選択を行って下さい
②hjklが遅い → こちらは同様のご質問をされる方がいらっしゃってTwiiterにて解答させて頂いたのですが、hh,jj,kk,llに15文字上下左右移動をするショートカットを入れている為に発生します。上記vimrcから、「hh」で検索して、該当部分を削除して頂ければ大丈夫です。
普段、矢印移動がメインのためこういったショートカットを入れていました。すみません。

問題のあるコメントを報告する

@ryuta69 さん
迅速な回答に感謝いたします!
まさにその、hjkl問題で悩んでおりました。
これで、vimがまた1つ(と言わず100くらい)好きになりました。
まあ、悲しいかな、ほかに会社で使っている人がいない、そもそもコード書くのが自分だけ、なので、自慢もどや顔もできないんですが…

問題のあるコメントを報告する

@yoddy さん

良かったです!
yoddyさんの情報ということで、記事に追記させて頂きます!

vim好き好きvimmerさんの繋がりができて、とても嬉しいです!

ただそうなんですよね・・・私も周りにいないです(笑)
vimの新しく好きになった所とか、共有して「おおー!」って感動できる人がいると嬉しいんですけどね、いないので今回記事にしたという経緯がありました(笑)

ちなみにたまーにコワーキングスペースでデスクトップ一面にこのvim画面を広げていると、寄ってきてくれる方がいたりします・・・

問題のあるコメントを報告する

Vimから入ったプログラミング人生が始まってまだ1年くらいの素人です。周りの同期からもVScode使えばいいと散々言われてきましたが、この記事読んで励みになりました。カスタマイズ、これからも頑張っていこうと思います。

問題のあるコメントを報告する

@Nedward さん
励みになれた事、そしてvimmerの方のお力になれてとても嬉しいです!
楽しみながら満喫して、情報交換なんかもしていけたら嬉しいです!

問題のあるコメントを報告する

vscodeは便利だったけどvimの操作性、速さ、は実現できなかったのでvimに戻りました。vscodeでvim入れてvim風にカスタマイズしてる記事たくさんみるけど完全ノーマウスできてない(もしかして自分ができてないだけ?)、、おそい、、。vscodeがvimの操作性、速さを兼ね備えればvscodeまた使いたなぁ。私にとってはまだまだvimのメリットが大きいのでvimをおすすめします。ほんと楽チンですよねー。vim万歳:point_up:

問題のあるコメントを報告する

@JOEEEE44 さん
コメントありがとうございます!

本当、vimを仮想実現するのであるならば、操作性や速度も完全にして欲しいですよね。

完全になるなら、プラットフォームがターミナルからIDEに変わるだけの話なんですが......

結論、vimの個性は真似できないという事ですね!
vim万歳!

問題のあるコメントを報告する

もともとVimmerでしたが、VScode Vimを使用しています。
この記事を読んで戻ろうかなと思いました。

ここまでカスタマイズできるものなんですね。尊敬です。
ちなみにテーマはmolokai一択です。
Vim万歳!

問題のあるコメントを報告する

@flanres さん
コメントありがとうございます!
おおお、元vimmerの方にこそ通じてほしかった内容だったので、とても嬉しく思います!
molokai良いですよね!自分も実は去年までずっとmolokaiで、周りの人もほとんど同じでした。
最近ayuを知って切り替えたんですけど、どっちにも良さがあるんだ、という結論に至りました(笑)

vim万歳!

問題のあるコメントを報告する

vierです(←何か嫌なものを連想させますね。スミマセン)。

四半世紀前にSun WorkStationの前で半泣きで憶えてしまって。以来、数年前まで.vimrcすら知らずに普通に真っ白なまま使ってました。

20年位前に「あ、EmacsはどのUNIXにも入っているわけではないけど、viは必ずある。こっちでいいや」と。憶えられなかったというのもありますが・・。

いつの頃からかvimというものが出てきて(?)気持ち悪いなーとか思ってた頃もあります(笑)

開発は普通にEclipse使わされてます。。

viはサーバーの中に入った時にシェル操作からそのままファイル編集してサービス上げ直して、のように使えますし、編集コマンドによってはデフォルトがviとかあるので、vi使えてよかったーと思いますね。

vimだと1文字多くてめんどぃけど、皆さんはvimと言いながらviと打つのですか?それともvimと打つのが今どきの常識?(汗)

問題のあるコメントを報告する

alias vi=vim

問題のあるコメントを報告する

@ximia さん
コメントありがとうございます!
遂にいらっしゃいましたね...vier使い!

4半世紀ともなると、プラグラミングの歴史を見てきて、その傍にいつもviがいたんですね

私はまだまだ新参ですが、一番最初はviでした。4半世紀も前の @ximia さんとトランスして、私も泣く泣く覚えた思い出です(笑)

きっと、これから10年後も同じような体験をする人が相変わらず出て、その中からvierやvimmerが生まれてくるんでしょうね(笑)

私は @shiracamus さんと同じaliasを入れてます!

問題のあるコメントを報告する

@ryuta69 情報交換ありがたいです!

こちらvimテクをまとめているのですが、もし、何かもっと効率の良いものがあれば、教えていただきたいです。
https://qiita.com/Nedward/items/c9f4c739210b0a8b5137

こちら、自分が今のカスタマイズしてあるneovimです。ただ、あまりこちらは参考にならないと思います・・・すいません。
https://github.com/Ohnao/neovim

問題のあるコメントを報告する

@Nedward さん
コメントありがとうございます!
うわー、すごいまとまってる良い記事ですね!

そうですね、もし追記するとしたら
私がよく使っているコマンドに「m」があります
100行あるファイルの中から、一部だけ置換したい/操作したいという時
始点でma
終点でmbと押してから
:’a,’bs/〇〇/〇〇/g
で、その範囲だけ置換できたりします!

https://qiita.com/syui/items/442fd0905a1f2005c10e

あとは折りたたみ機能とかもすごい便利です!
https://qiita.com/jiro4989/items/12a41fb58cc42287092f

問題のあるコメントを報告する

@ryuta69 返信遅れました。すみません。 
なるほど!ありがとうございます!追記させていただきます!

問題のあるコメントを報告する

Python3.7でも動作しますか?

問題のあるコメントを報告する

参考にさせて頂きました。ありがとうございます!

一点質問ですが、ツリー、コード、ターミナルを区切っている、「太い白の点線」はどうすれば設定できますか?

私の場合、細い黒の点線で、おそらくデフォルト?のままです。。

-->
自分が適用しているカラーテーマファイルの該当箇所のカラーコードを変更したら無事できました。
勝手に、お騒がせしました。

問題のあるコメントを報告する

@daikiclimate さん
解答がめちゃくちゃおくれてすみません・・・大丈夫ですよ!
もしエラーはいたらycmのcompiler部分をpython2のパスに差し替えてください

問題のあるコメントを報告する

@takuyanin さん
返信がめちゃくちゃおくれてすみません・・・通知が追えず・・・(ツイッターとかでガンガン質問投げていただけると嬉しかったり)

問題のあるコメントを報告する

@ryuta69 さん
たまにWSLでvimを使ってWeb pageを管理しているのですが、こちらの記事のおかげで作業効率がめちゃくちゃ上がりました。
記事の手順だとWSL(Ubuntu18.04)環境ではエラーを吐くので下の記事にあるようにYouCompleteMeの設定をし、.vimrcでycm serverのパスをpython2.7からpython3.〇のようにpythonのバージョンに合わせることで正常に動きました。本当にありがとうございました!

https://qiita.com/TsutomuNakamura/items/2fc8aa6c0feaf31c86e4

問題のあるコメントを報告する

@htnabe さん
コメントありがとうございます!
おおおよかったです!そしてwsl基準ではエラーを吐いてしまうのですね・・・未検証でした・・・
早速記事の方に追記させていただきます!

情報を下さりありがとうございました!

問題のあるコメントを報告する

@ryuta69 さん
この記事を見て、ウチのMacのviもディザイアに溢れるステキな見た目になると思って、ご提示の設定とプラグイン、その他プラグインのインストールに必要と言われたツール(npmとかcmakeとかgoとか)を入れてみて試してみたら、vi起動した瞬間SIGSEGV出してviが起動できなくなってござるw
どうやら拙者もまだまだ修行が足りぬ模様。Syslogみて切り分けに励みます。

ちなみに当方の環境を参考までに。
macOS:10.14.6(Mojave)
viバージョン:こんな感じ
$ vi --version VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jun 19 2019 19:08:44)
記載の手順を実行するのに「足りない」と言われたモジュール:
cmake、go、npm
→npmまで入れたところで、プラグインのインストール完了。

どうやらまだまだ修行が足りぬようであるので、SIGSEGVの原因を探る所存。
とりあえずご参考として、記載の設定完了後のviコマンド叩いたあとのコンソールを提供いたします。
なにか見えましたらここに追記いたします。
とりあえず素人macユーザーからの情報提供にござる。
スクリーンショット 2019-10-09 23.59.56.png

問題のあるコメントを報告する

vimmerではないのですが
誰かがvimrcの最強設定を公開してくれているなら

仰るとおりLinuxサーバーでもサクッと編集できるvimにかなり惹かれております。
サーバーいじってる時にわざわざ

一旦、viコマンドで開いてvscodeにコピペして書き換えとか
最近は、vscodeで直接ssh接続できたりしますが
それでもファイル編集、保存が不安定で上手くいかなかったりとか...
結局、vscodeでサーバー上のファイル読みはできるけど
書き込みは上手くいかないので
vscodeで読み込んで新規ファイル作成してペーストして
編集した物をviで開いている方にペーストという
超イケてない作業になってしまってます。

なので、これもうvim入門しようかなと
vscodeイケてるはイケてるけど
どの環境でも動くvimにもかなり惹かれる

Sign up for free and join this conversation.
If you already have a Qiita account