虎(牛)龍未酉2.1

記録帳|+n年後のジブンが思い出せますように……

作業ログ|vim (MacVim)-04

背景

vimを使えるようになろうとおもってがんばっている。

やったこと

できたこと、できなかったこと

これからやりたいこと

  • Vim自体
    • insert modeでもうちょっとemacs likeに
    • マーク機能を使えるようになりたい
    • ファイラーを使えるようになりたい(fernが候補)
  • vimっぽいメモのワークフローをつくりたい
    • 月単位でmemo.mdをつくって
    • ファイル名および中身までをfzfで検索する
    • スニペットで項目フォーマットを記入する
    • みたいな感じを考えているが如何
  • dotfilesをGitHubで管理したい

ここまでの.vimrc

" URL: 
" Author: 
" Description: Personal .vimrc file
"
" All the plugins are managed via vim-plug, run :PlugInstall to install all
" the plugins from Github, :PlugUpdate to update. Leader key is the spacebar.


" 1: basic settings {{{1

syntax on                       " シンタックスハイライトをオン
set nocompatible                " not compatible to Vi
set backspace=start,eol,indent  " 
set whichwrap=b,s,[,],<,>,~     " 
set mouse=
let mapleader = "\<space>"      " leaderキーをspaceに変更 *1 p122

" 検索オプション
set incsearch                   " インクリメンタルサーチ
set hlsearch                    " 検索時にハイライト
set ignorecase                  " 検索時大文字小文字を無視
set nowrapscan                  " ファイル末まで検索後、頭に戻らない

set showcmd                     " 入力中のコマンドを表示
set wildmenu                    " タブによる自動補完を有効化
set wildmode=list:longest,full  " 最長マッチまで補完し自動補完メニューを開く

" 編集オプション
filetype plugin indent on       " ファイルタイプに基づいたインデントを有効化
set tabstop=4                   " タブ幅を4に
set expandtab                   " タブをスペースに変換
set shiftwidth=4                " インデントに使われるスペースの数
set autoindent                  " 新しい行を始めるときに自動でインデント
set smartindent                 " smart indent
set ambiwidth=double
set clipboard=unnamed,unnamedplus   " Use system clipboard

" 折りたたみオプション
set foldmethod=indent           " 折りたたみ設定 *1 p65/68
set foldlevel=99                " なるべく折りたたみを開く


set nrformats-=octal            " <C-a/x>で8進数とはみなさない
set hidden
set history=2000                " 履歴を2000件持つようにする
set virtualedit=block


" 2: plugin: using vim-plug {{{1

call plug#begin()

Plug 'tpope/vim-unimpaired'     " useful mappings
Plug 'Lokaltog/vim-easymotion'  " better move commands
Plug 'ctrlpvim/ctrlp.vim'       " あいまい検索
Plug 'itchyny/lightline.vim'    " custom statusline
Plug 'vim-jp/vimdoc-ja'         " help in Japanese
Plug 'sjl/gundo.vim'            " visualize the undo tree
Plug 'fuenor/qfixgrep'          " grep extension
Plug 'glidenote/memolist.vim'   " take memos quickly
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'https://github.com/alok/notational-fzf-vim'
                                " fzf and notational-fzf
Plug 'fmoralesc/vim-pad'        " quick note taking

Plug 'arcticicestudio/nord-vim' " color scheme
Plug 'micke/vim-hybrid'         " color scheme
Plug 'jacoborus/tender.vim'     " color scheme
Plug 'cocopon/iceberg.vim'      " color scheme

call plug#end()


" 3: user specific {{{1

" key remap {{{2

" disable arrow keys
noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

" swap ; and : *4
nnoremap ; :
vnoremap ; :
nnoremap q; q:
vnoremap q; q:
nnoremap : ;
vnoremap : ;

noremap Y y$                    " YをDなどと同じ感じに
noremap <Space>h ^
noremap <Space>l $

nnoremap <Esc><Esc> :noh<CR><Esc> " ハイライトを消す

" insert mode / emacs lik         " 補完が効かないことに注意e
" inoremap <C-n> <Down>           " doesn't work
" inoremap <C-p> <Up>             " doesn't work
inoremap <C-b> <Left>
inoremap <C-f> <Right>
inoremap <C-a> <C-o>^
inoremap <C-e> <C-o>$
inoremap <C-h> <BS>
inoremap <C-d> <Del>


" swapファイルをひとつのところにまとめる (*1 p31)
set directory=$HOME/.vim/swap//

" undo {{{2
" すべてのファイルで永続アンドゥ (*1 p39)
set undofile
set undodir=$HOME/.vim/undodir


" current file directry {{{2
" move current file directory *4
augroup movecurrentdir
  autocmd!
  autocmd BufRead,BufEnter * if isdirectory(expand('%:p:h')) | lcd %:p:h | endif
augroup END


"" vimrc関係 *4 {{{2

" 現在のバッファが空っぽならば :drop それ以外なら :tab drop になるコマンド
function! SmartDrop(tabedit_args)
  if expand('%') == "" && !&modified
    let drop_cmd = "drop "
  else
    let drop_cmd = "tab drop "
  endif
  silent execute drop_cmd . a:tabedit_args
endfunction
command! -nargs=* SmartDrop call SmartDrop(<q-args>)

nnoremap <silent> <Leader>v :<C-u>SmartDrop ~/.vim/vimrc<CR>
nnoremap <silent> <Leader>gv :<C-u>SmartDrop ~/.vim/gvimrc<CR>

" insert timestamp
let g:ts_weeks = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ]
let g:ts_wkday = strftime("%w")
inoremap <expr>
  \ <Leader>ts strftime('[%Y-%m-%d ') . 
  \ ts_weeks[ts_wkday] . 
  \strftime(' %H:%M]')


" 4: plugin specific {{{1

"" leader+gでGundoToggle
noremap <Leader>gu :GundoToggle<cr>

" 見た目の設定(カラースキーム含む) {{{2

set number                      " 行番号表示
set laststatus=2                " ステータス行を常に表示
set list                        " 不可視文字の表示
set listchars=tab:»-,trail:-,eol:,extends:»,precedes:«,nbsp:%
set scrolloff=5                 " 最低でも表示する行数
set cursorline                  " Highlight cursor line
set foldcolumn=3                " 折りたたみ状態表示カラム数

set t_Co=256
set termguicolors

" hybrid colorscheme {{{2
" let g:lightline = { 'colorscheme': 'hybrid' }
" set background=dark
" let g:hybrid_italic=0       " hybridでitalicをオフ
" colorscheme hybrid

" nord colorscheme {{{2
let g:lightline = { 'colorscheme': 'nord' }
let g:nord_cursor_line_number_background = 1
colorscheme nord

" memolist.vim {{{2
let g:memolist_path         = expand('~/Dropbox/u/201100_memolist')
let g:memolist_memo_suffix  = 'md'
" let g:memolist_fzf          = 1
nnoremap <Leader>mn  :MemoNew<CR>
" nnoremap <Leader>ml  :exe "CtrlP" g:memolist_path<CR><F5>
nnoremap <Leader>ml  :MemoList<CR>
nnoremap <Leader>mg  :MemoGrep<CR>

" notational-fzf-vim {{{2
let g:nv_search_paths   = [
  \ '~/Documents/MyNotes/201100_nvmd',
  \ '~/Documents/MyNotes/201100_memolist',
  \ '~/Documents/MyNotes/200500_Org',
  \ ]
let g:nv_create_note_window = 'tabedit'
nnoremap <silent> <Leader>nv :NV<CR>

" pad-vim {{{2
let g:pad#dir = expand('~/Dropbox/u/201100_memolist')


" 9: 出典リスト {{{1
" 1: マスタリングVim Ruslan Osipov
" 2: Vim & Emacsエキスパート活用術 SD別冊
" 3: https://github.com/cohama/.vim/blob/master/init.vim
" 4: https://github.com/deris/dotfiles/blob/master/.vimrc
"

" modeline {{{1
" vim: set sw=2 ts=2 sts=2 et tw=80 ft=vim fdm=marker:

リソース(参考サイト)

Vim Awesome

Vim を使っている/始めたいなら読んでおきたい Web の記事

glidenote/memolist.vim

fmoralesc/vim-padvim-pad

alok/notational-fzf-vim

MacVimでウェイトの軽いフォントを使えるようになってチョーしあわせなんですけど。