Skip to content

vim Setup

foolmacky edited this page Jun 17, 2021 · 19 revisions

■vimを使う難しさ

vimはそれぞれの用途と好みに合わせてカストマイズして使うことが大前提のエディタ
ただ、そのカストマイズについて構造的に解説してくれているドキュメントが殆どないのが、初心者にとって辛い
単にTIPSの集積となってしまっていて、どうアプローチし、どの部分をどのやり方でカストマイズすべきなのか、構造的に説明した文章が無いので、モヤモヤした状態のままに妥協して使っている感じになっている

■カストマイズの方向性

  • カストマイズは.vimrcで行う
  • vimエディター自体の画面の設定、option設定を「:set」記述で行う
  • エディターのキーアサインの変更、設定を「nnormap」「onormap」記述で行う
  • 表示職の設定、カーソルの色設定などを記述
  • plugin管理ツールの設定をし、.vimrcファイルに読み込むべきpluginの設定を記述
  • 開発者として必要なLanguageServer、及びそのclientの設定を記述
  • 開発をサポートするpluginのカストマイズ設定の追加

■cui版vimをmac上でアプリのように起動する

on run{input}
    if input is {} then
        set cmd to "vim"
    else
        set the_path to POSIX path of input
        set cmd to "vim " & quoted form of the_path
    end if

    tell application "iTerm"
        activate
        create window with profile "Vim Launcher Profile" command cmd
    end tell
end run

■vim setup

https://www.vim.org/
sourceから最新版をmake , sudo make installで入れる
詳細はREADMEdoc/* src/INSTALL を参照のこと
cui版でありながら、普通にマウスも使える。gvimはいらないかもしれない。
macでcompileする際には make, make test, sudo make installで入れるが、make testでエラーが出るかもしれない

glibtool: command not found

glibtoolはhomebrewを使っていれるのが楽だ。vimのINSTALL.macにstack-overflowで検索しろ、と書いてあるのは笑った

glibtool is "GNU Libtool". It is typically installed as libtool on most systems, 
but because macOS has its own libtool that has completely different functionality, 
it is usually installed as glibtool on macOS.

If you can't directly use homebrew to install it, 
you can duplicate the steps in its recipe, 
which you can find here: https://github.com/Homebrew/homebrew-core/blob/master/Formula/libtool.rb

For the sake of keeping this answer "working" even if homebrew goes away, 
the homepage for libtool is https://www.gnu.org/software/libtool/ 
and you can follow the instructions there for information on how to build and install it.
brew install libtool

vim-plug

vim ver.8からは標準のplugin機能が、実装されたものの、多くのプラグインがこれを使うので、入れる

jelly beans

https://www.vim.org/scripts/script.php?script_id=2555 一部の設定は上書きする

vim-lsp

vimのlangage server client
https://github.com/prabirshrestha/vim-lsp

go-pls

vimのgolang langage server
GO111MODULE=on go get golang.org/x/tools/gopls@latest
https://github.com/golang/tools/blob/master/gopls/README.md

govim(not vim-go)

vimのlanguage server clientを使ってgolangをハンドリングするplugin
https://github.com/govim/govim
:cw でエラー内容などがcondole windowに表示される。エラーが解消すると、メッセージは消える。
オムニ補完を起動するにはc-x,c-oを打鍵する必要がある。
オムニ補完モードに入ると、自動的にトップにウインドウが開くが、これをしない方法はないのか?

言語ごとに、その言語をハンドリングするpluginと、言語ごとのlanguage serverが必要になる
プログラムソースを編集開始する前には、今回のソースのlanguage serverに着替えてから編集を開始する(当然か?)

■Go Debugg suppoort

delve

https://github.com/derekparker/delve
go getでintallbr> xcodeのコマンドラインは、すでにx-codeをインストール済みのため、すでにインストールされているとエラーになる

vim-delve

https://github.com/sebdah/vim-delve
https://note.com/miyazi777/n/nb2f520f91ed6

■vim & mouse

vim側でmouseを使えるようにしてしまうと、vim上では、iTerm2のselection -> clippboardとかの制御が、きかなくなる
mac上では下に書いたclipboard設定をすることで、yancからc+vでブラウザの画面などに貼り付けられる

■日本語

入力ソース設定onVim

  • ESCをおしたら日本語入力を切る
  • google日本語入力の設定で対応 環境設定画面 一般->キー設定の選択で、編集ドロップダウンでエントリーをを追加
  • この設定をすると、タスクバーの表示が日本語のまま、入力は英数になったりする。表示の制御がちゃんとできていない
  • 日本語をONにしたらinsert modeにする: これはまだ手段が見つかっていない
  • https://www.soum.co.jp/misc/vim-no-susume/12/

■vim & clipboard

:set clipboard=unnamed
で、pがシステムのクリップボードから貼り付ける形に設定変更した
yはシステムのクリップボードにyancするようになる

現在の.vimrc

call plug#begin('~/.vim/plugged')
Plug 'rust-lang/rust.vim'
"Plug 'govim/govim'
"Plug 'sebdah/vim-delve', {'for': ['go'] }
"Plug 'ryanolsonx/vim-lsp-javascript'
Plug 'nanotech/jellybeans.vim'
Plug 'prabirshrestha/vim-lsp'
Plug 'prabirshrestha/async.vim'
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'
Plug 'Shougo/vimproc.vim', {'do' : 'make'}
Plug 'Shougo/vimshell.vim'
Plug 'mattn/vim-lexiv'
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()

colorscheme jellybeans
let g:jellybeans_overrides = {
\ 'background': { 'ctermbg': 'none', '256ctermbg': 'none' },
\ 'CursorLine': { 'ctermbg': 'none', '256ctermbg': 'none' },
\ 'Statement': { 'ctermfg': 'Blue', '256ctermfg': 'Blue' },
\}
if has('termguicolors') && &termguicolors
	let g:jellybeans_overrides['background']['guigb'] = 'none'
endif

syntax enable
hi Directory	term=bold cterm=bold ctermfg=12 gui=bold guifg=blue
hi Comment	term=underline ctermfg=12 gui=bold guifg=blue
hi CursorColumn	term=reverse ctermbg=240 guibg=DarkGrey
hi CursorLine	term=underline cterm=underline gui=underline

let g:netrw_liststyle=3
let g:netrw_altv=1
let g:netrw_alto=1

if executable('rls')
    au User lsp_setup call lsp#register_server({
        \ 'name': 'rls',
        \ 'cmd': {server_info->['rustup', 'run', 'nightly', 'rls']},
        \ 'whitelist': ['rust'],
        \ })
  autocmd FileType rust nmap <buffer> gd <plug>(lsp-definition)
  autocmd FileType rust nmap <buffer> ,n <plug>(lsp-next-error)
  autocmd FileType rust nmap <buffer> ,p <plug>(lsp-previous-error)
endif

"golang
"if executable('gopls')
"  au User lsp_setup call lsp#register_server({
"      \ 'name': 'go-lang',
"      \ 'cmd': {server_info->['gopls']},
"      \ 'whitelist': ['go'],
"      \ })
"  autocmd FileType go setlocal omnifunc=lsp#complete
"  autocmd FileType go nmap <buffer> gd <plug>(lsp-definition)
"  autocmd FileType go nmap <buffer> ,n <plug>(lsp-next-error)
"  autocmd FileType go nmap <buffer> ,p <plug>(lsp-previous-error)
"  autocmd BufWritePre *.go LspDocumentFormatSync
"endif

"if executable('typescript-language-server')
"	au User lsp_setup call lsp#register_server({
"    \ 'name': 'javascript support using typescript-language-server',
"    \ 'cmd': {server_info->[&shell, &shellcmdflag, 'typescript-language-server --stdio']},
"    \ 'root_uri':{server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'package.json'))},
"    \ 'whitelist': ['javascript', 'javascript.jsx', 'javascriptreact'],
"    \ })
"	autocmd FileType javascript nmap <buffer> gd <plug>(lsp-definition)
"	autocmd FileType javascript setlocal omnifunc=lsp#complete
"endif

let g:lsp_async_completion = 1
let g:lsp_diagnostics_enabled = 1
let g:lsp_diagnostics_echo_cursor = 1
let g:lsp_text_edit_enabled = 0
let g:lsp_highlight_references_enabled = 1
let g:asyncomplete_auto_popup = 1
let g:asyncomplete_auto_completeopt = 0
let g:asyncomplete_popup_delay = 200
let g:rustfmt_autosave = 1

"innotations
inoremap <expr><CR>  pumvisible() ? "<C-y>" : "<CR>"
set completeopt=menuone,noinsert
inoremap <expr><C-n> pumvisible() ? "<Down>" : "<C-n>"
inoremap <expr><C-p> pumvisible() ? "<Up>" : "<C-p>"

"quickfix
autocmd QuickfixCmdPost make,grep,vimgrep if len(getqflist()) != 0 | copen | endif
"autocmd QuickfixCmdPost *grep* copen
nnoremap <silent> <C-n> :<C-n>cnext<CR>
nnoremap <silent> <C-p> :<C-p>cprev<CR>

set nu
set encoding=utf-8
set fileencodings=utf-8,iso-2022-jp,cp932,sjis,euc-jp
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
set fileformats=unix,dos,mac

set tabstop=4
set shiftwidth=4
set noswapfile
set nocompatible
set nowritebackup
set nobackup
set autoread
set hidden
set showcmd
set showmatch
set cursorline
set cursorcolumn
set laststatus=2
set wildmode=list:longest
set ignorecase
set smartcase
set wrapscan
set hlsearch
set mouse=a
"set ttymouse=xterm2
set ttymouse=sgr
set updatetime=500
set balloondelay=250
set autoindent
set smartindent
set backspace=2
set clipboard=unnamed

filetype indent on
filetype plugin on

nmap <Esc><Esc> :nohlsearch<CR><Esc>

■Multi画面の操作コマンド

  • cursorの画面移動 左画面へ:<C-w>h 同様に j, k, l
  • 画面自体を移動する 縦分割して左に:<C-w>H 同様に J, K, L

Clone this wiki locally