vimにフレンズの名前を補完する設定を追加してみた
vimでaleとunite使ってるのでunite-aleを作った話
tl;dr
是非作ってください
— 暗黒美無王 dark neo power (@ShougoMatsu) 2017年10月2日
2017/9/30(土)のOsaka.vim #11にてALEの存在を知りました。
ALEはVim8/Neovimのプラグインでlintを非同期で実行してくれます。
この結果の一覧をUniteで表示/ジャンプしようというのがunite-aleです。
以下はALE/Rubocop(Ruby)を動かしてみたときのGIFです。
バグ
:Unite ale -no-quit
したときに<C-l>
で<Plug>(unite-redraw)
が実行されますが、これに対応していないので対応したいです。
誰か詳しい方PullRequest頂ければ嬉しいです。
あとはIssueで…
余談
開発に掛けた時間は以下のような感じになりました。
- ALEのソースを読む: 10分
- Uniteのsourceの作り方を調べる: 20分
- コーディング: 5分
deniteで作れとのこと
以上
macOS+iTerm2+tmuxな環境でクリップボードを扱う(2017)
環境
- macOS 10.12.6 (Sierra)
- iTerm2 3.1.2
- tmux 2.5
- vim 8.0 (Homebrewでインストール
vim --version
で+clipboard
となっているのを確認)
iTerm2 の設定
Preferences を開き、 [General] タブの "Applications in terminal may access clipboard" のチェックをつける
reattach-to-user-namespace のインストール
tmux の中からクリップボードにアクセスするため、
$ brew install reattach-to-user-namespace
tmux の設定
~/.tmux.conf
に以下の行を追加
set-option -g default-command "reattach-to-user-namespace -l bash"
vim の設定
~/.vimrc
に以下の行を追加
set clipboard=unnamed
Vimを起動した後に指定したコマンドを自動で実行させる方法
記事の内容はタイトルそのままですが、私はVimに glidenote/memolist.vim: simple memo plugin for Vim.というプラグインをインストールして活用しています。しかし、メモを取ろうとVimを起動する都度、以下の作業を行う必要があり、それが面倒でした。1
- Vimを立ち上げる
:MemoNew
コマンドを実行する- メモのタイトルを入力する
- メモをVimで編集するか、Vimを終了してATOMでメモを編集する。
そこで、「ターミナルからVimを起動するときに、コマンドラインモードのコマンドを指定して、Vimが起動したらそのコマンドが自動的に実行される方法」がないか調べたところ、以下の方法で対応できることが分かりましたので、参考までに記事にしました。
具体的には、以下のとおりオプションを指定してVimを起動させると、Vimが起動すると同時にコマンドが実行されます。
vim -c :MemoNew# Vim起動後、:MemoNewコマンドが自動で実行され、メモのタイトルを入力する画面が表示される。
vim --help
でオプション-c
は-c <command> Execute <command> after loading the first file
と説明されており、このオプションを指定すると、.vimrc
を読み込んだ後に指定してコマンドを実行してくれます。そのため、プラグインに関するコマンドを実行することができます。また、オプション-c
は複数指定できますので、以下のコマンドも実行可能です。
vim -c :MemoNew -c :wq# Vim起動後、:MemoNew コマンドが自動で実行され、メモのタイトルを入力する画面が表示される。# メモのタイトルを入力したら、自動で「保存・終了」のコマンドを実行する。# これで、メモのファイル(Markdownファイル)が作成されます。
ちなみに、Vimの標準コマンドを実行できれば良いという場合は以下の方法でもOKです。
vim --cmd :vsplit# 最初から左右2画面に分割します
vim --help
でオプション--cmd
は--cmd <command> Execute <command> before loading any vimrc file
と説明されており、このオプションを指定すると、.vimrc
を読み込むより前に指定したコマンドを実行してくれます。そのため、プラグインに関するコマンドは実行できませんが、Vimの標準コマンドは実行できます。
Vimで日本語文章を編集していると途中から日本語入力が異常に遅くなったことがあったため、今のところ、日本語文章の編集はATOMで行なっています。 ↩
[vim] 挿入モードで検索ハイライトを無効にする
概要
検索時のハイライトはありがたいけど、挿入する頃には鬱陶しいので消したい。
:nohを適当にマッピングしてもいいがそれも面倒くさい。
ブログとのマルチポスト qs Developers
挿入モード遷移時に:nohを実行する
autocmdのInsertEnterを使えば、挿入モード遷移時に任意のコマンドを実行させられるので、ここでnohを叩かせる。
autocmd InsertEnter * :noh
が、ダメ。動作しない。
Why
ヘルプを叩いてみた。
:noh[lsearch] Stop the highlighting for the 'hlsearch' option. It
is automatically turned back on when using a search
command, or setting the 'hlsearch' option.
This command doesn't work in an autocommand, because
the highlighting state is saved and restored when
executing autocommands |autocmd-searchpat|.
Same thing for when invoking a user function.
autocommandでは機能しないってハッキリ書いてあった。
代替策
しかたないので、挿入モード移行時にはハイライト機能を無効にし、挿入モードを終了したら有効に戻すというアプローチを取る。
autocmd InsertEnter * setnohlsearch
autocmd InsertLeave * sethlsearch
いい感じに動いた。
Chromebookにvimprocインストール
ubuntuでvi/vimを使った時に打ち込みができない時の修正方法
ubuntuでvi/vimを開いてテキスト修正をしようとすると矢印キーを操作しようとするとABABCAのようにアルファベットが記入され、「あれ?これなんなん?」みたいな感じになりました。
原因
ubuntuのviではデフォルト設定として矢印キーにアルファベットABCDが設定されている。
これが原因でviでテキスト修正しても全くうまくいきませんでした。
そんなわけで修正方法をググりました。
解決方法
色々あるが、ubuntu環境にvimをインストールするのが早い。
現在vimがインストールされていてもそれを削除する必要はなく、$ sudo apt-get install vim
と打ち込めば上書きされます。
その後$vim --version
でインストールされているか確認してみましょう。
できていれば矢印キー (↑↓←→)を入力すると(ABCD)になってしまうキー設定も修正され、他の環境と同じように通常通りのvimの修正作業が行えます。
ubuntu16.04 - vim8.0(lua, python, ruby, clipboardが使える)ビルド、インストール
参考にした情報
- 既存のvimをluaオプション付きのvim8.0に入れ替える。 ※この記事が非常に参考になったのですが、clipboardが使えなかったので記事を作成しました。
- https://www.reddit.com/r/vim/comments/52knab/how_to_build_vim_8_with_clipboard_support/
セットアップ(必要なプログラムのインストール)
# lua, python, ruby
sudo apt-get install -y git build-essential ncurses-dev lua5.2 lua5.2-dev luajit python-dev python3-dev ruby-dev
# vimのビルドに必要なツールインストール ※Software & Updateの設定で失敗することがある、その時は以下の操作
sudo apt build-dep vim
※ sudo apt build-dep vimが失敗した場合は"Software & Updateを開いて以下の"Source code"にチェックをつける
あとはgitでソースコードを落として、ビルド & インストール
#ディレクトリ移動。
cd /opt/
sudo git clone https://github.com/vim/vim
cd vim/
#ビルドファイル生成
sudo ./configure --with-features=huge --enable-gui=auto --enable-gtk2-check --with-x --enable-multibyte --enable-luainterp=dynamic --enable-gpm --enable-cscope --enable-fontset --enable-fail-if-missing --prefix=/usr/local --enable-pythoninterp=dynamic --enable-python3interp=dynamic --enable-rubyinterp=dynamic
## makeファイルを生成
sudo make
# vim8.0をインストールする。
sudo make install
#vim8.0が正常にインストールされているか確認する。
vim --version
# clipboardが使えるVim8.0
Kindleハイライトを編集してハイライトメモをつくる
リニューアルされたKindleのハイライトをまとめるページ。
以前に比べるとだいぶ見やすくなったが、まだ個人的には不満も多いので、コピペして自分なりに編集してからハイライトメモを作っている。
まずは、「Kindle メモとハイライト」のページに行き、ハイライトを取り出したい本を左ペインの中から選択する。
すると、ハイライトしたりメモ書きした内容が一覧で出てくるので、一番上の書籍名から一番下までをコピーして、vimに貼り付ける。(MacVim使ってます。)
コピペしたままだといろいろと不要な部分が残っているので、次のようなコマンドを実行してそれを削除する。
:%s/ピンク色の.*//g:%s/\s\s\+//g:%s/^\n\n\n/\r/g
ここで何をしているかというと、まず一行目は「ピンク色のハイライト...」という行を削除している。
ピンク色しか使っていないのでいつもこれだけだが、人によって色を使い分けていたりするとその色ごとに指定が必要になるので注意。
2行目では、何故か先頭からスペースを複数含んだだけの行が幾つか存在しているので、これを削除する。
おそらくハイライトページのデザインの関係で紛れ込んでいると思われるが、当然不要なので消してしまう。
最後に、行間を詰めるために改行だけが続いている部分を改行1つに置き直している。
これは好みなので、行間が広いほうがいいという場合には使わなかったりする。
あとは簡単に章立てを入れたり整形してから、PDF化してDropboxにおいている。
vim歴半年の初心者がvimrc晒す
環境
vim 8.0
意識してること
- 使っているMBAが古い(mid 2011)ので、ラグがなるべく出ないようにする。
- rails使ってバックエンド開発が本業なので、若干ruby・rails寄り。
- win・mac・linuxで環境依存出さないようにしたい(あくまで希望)。
- 以前使ってたsublime textもリスペクトしてる。
本題
「これ、もっとこうできますよ」的なアドバイスいただけると非常に助かります。
if $compatible
set nocompatible " Be iMproved
endif
set rtp+=~/.vim/dein/repos/github.com/Shougo/dein.vim
" プラグイン管理(dein)
call dein#begin(expand('~/.vim/dein'))
call dein#add('vim-airline/vim-airline') "powerline系
call dein#add('vim-airline/vim-airline-themes') "powerline系テーマ
let g:airline_powerline_fonts = 1
set laststatus=2
let g:airline#extensions#tabline#enabled = 1
let g:airline_theme = 'dark'
call dein#add('scrooloose/nerdtree') "ファイル関係をツリー表示[ss]
call dein#add('ryanoasis/vim-devicons') "ツリーにアイコン表示
call dein#add('Xuyuanp/nerdtree-git-plugin') "NERDTreeにgitを表示
call dein#add('tiagofumo/vim-nerdtree-syntax-highlight') "NERDTreeにgitを表示
nnoremap :ss :NERDTreeToggle
let NERDTreeShowHidden = 1
let g:nerdtree_tabs_open_on_console_startup = 1
"vim-nerdtree-syntax-highlight
let s:rspec_red = 'FE405F'
let s:git_orange = 'F54D27'
let g:NERDTreeExactMatchHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExactMatchHighlightColor['.gitignore'] = s:git_orange " sets the color for .gitignore files
let g:NERDTreePatternMatchHighlightColor = {} " this line is needed to avoid error
let g:NERDTreePatternMatchHighlightColor['.*_spec\.rb$'] = s:rspec_red " sets the color for files ending with _spec.rb
" vim-devicons
let g:webdevicons_conceal_nerdtree_brackets = 1
let g:WebDevIconsNerdTreeAfterGlyphPadding = ' '
" dir-icons
let g:WebDevIconsUnicodeDecorateFolderNodes = 1
let g:DevIconsEnableFoldersOpenClose = 1
let g:WebDevIconsUnicodeDecorateFolderNodesDefaultSymbol = ''
let g:DevIconsDefaultFolderOpenSymbol = ''
" file-icons
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols = {}
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['html'] = ''
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['css'] = ''
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['md'] = ''
let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['txt'] = ''
call dein#add('jistr/vim-nerdtree-tabs') "NERDTreeからタブを開く
nnoremap <silent> <C-e> :NERDTreeFocusToggle
" nnoremap <C-n> gt
nnoremap <C-p> gT
call dein#add('Shougo/neosnippet.vim') "補完
call dein#add('Shougo/neosnippet-snippets') "補完
call dein#add('terryma/vim-multiple-cursors') "複数カーソル検索
nnoremap :mmm :MultipleCursorsFind
vnoremap :mmm :MultipleCursorsFind
call dein#add('tpope/vim-fugitive') "コマンドでgit add,commit,push
let g:airline#extensions#branch#enabled = 1
call dein#add('airblade/vim-gitgutter') "gitの編集状態をgutterに表示
"neocomplcache
call dein#add('Shougo/neocomplcache') "vimスクリプト補完
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1
" Use smartcase.
let g:neocomplcache_enable_smart_case = 1
" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
\ 'default' : ''
\ }
" Plugin key-mappings.
inoremap <expr><C-g> neocomplcache#undo_completion()
inoremap <expr><C-l> neocomplcache#complete_common_string()
" Recommended key-mappings.
" <CR>: close popup and save indent.
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
return neocomplcache#smart_close_popup() . "\<CR>"
endfunction
" <TAB>: completion.
inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"
" <C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><C-y> neocomplcache#close_popup()
inoremap <expr><C-e> neocomplcache#cancel_popup()
let g:loaded_matchparen = 1
call dein#add('itchyny/vim-parenmatch') "閉じ括弧に下線
" call dein#add('itchyny/vim-cursorword') "同じ単語に下線
call dein#add('othree/html5.vim') "シンタックスハイライトをHTML5に対応
let g:html5_event_handler_attributes_complete = 1
let g:html5_rdfa_attributes_complete = 1
let g:html5_microdata_attributes_complete = 1
let g:html5_aria_attributes_complete = 1
call dein#add('tomtom/tcomment_vim') "コメントアウトショートカット
nmap ww gcc
vmap ww gcc
if !exists('g:tcomment_types')
let g:tcomment_types = {}
endif
let g:tcomment_types['eruby'] = '<%# %s %>'
let g:tcomment_types['erb'] = '<%# %s %>'
let g:tcomment_types['scss'] = '/* %s */'
call dein#add('alvan/vim-closetag', {'lazy':0, 'on_ft': ['html','xhtml']}) "閉じタグ自動補完
call dein#add('vim-ruby/vim-ruby') "rubyのシンタックスや補完
call dein#add('tpope/vim-rails') "railsの補完やシンタックスハイライト
autocmd User Rails.view* NeoSnippetSource ~/.vim/snippet/ruby.rails.view.snip
autocmd User Rails.controller* NeoSnippetSource ~/.vim/snippet/ruby.rails.controller.snip
autocmd User Rails/db/migrate/* NeoSnippetSource ~/.vim/snippet/ruby.rails.migrate.snip
autocmd User Rails/config/routes.rb NeoSnippetSource ~/.vim/snippet/ruby.rails.route.snip
call dein#add('alpaca-tc/vim-endwise.git') "railsのdef...endを補完
let g:endwise_no_mappings=1
call dein#add('mikoto2000/buffer_selector.vim') "バッファリストを表示
noremap <Space><Space> <Esc>:call buffer_selector#OpenBufferSelector()<Enter>
call dein#add('jelera/vim-javascript-syntax') "javascriptシンタックス
call dein#add('hail2u/vim-css3-syntax') "css3シンタックス
call dein#add('lilydjwg/colorizer') "色表示
call dein#add('cakebaker/scss-syntax.vim') "scssシンタックス
call dein#add('slim-template/vim-slim') "slimシンタックス
call dein#add('Shougo/context_filetype.vim') "ファイルタイプ判定
call dein#add('osyo-manga/vim-precious')
autocmd BufNewFile,BufRead *.{html,htm,vue*} set filetype=html
call dein#add('nathanaelkane/vim-indent-guides') "インデントの可視化
let g:indent_guides_enable_on_vim_startup=1
let g:indent_guides_auto_colors = 0
" 奇数インデントのカラー
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd guibg=#333333 ctermbg=235
" 偶数インデントのカラー
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven guibg=#2c2c2c ctermbg=240
let g:indent_guides_exclude_filetypes = ['help', 'nerdtree']
call dein#end()
set encoding=utf-8 "エンコード系
set fileencoding=utf-8 "エンコード系
set termencoding=UTF-8 "エンコード系
set fileformat=unix "ファイルフォーマット
set scrolloff=5 "スクロール時に下見えるようにする
syntax on "シンタックスハイライト
set t_Co=256 "配色設定
colorscheme Benokai "カラースキーマ
set number "行表示
set backspace=2 "backspaceの機能設定(字下げ、行末、挿入の開始点を超えて削除)
set cursorline "カーソルがいる行をハイライト表示
set nocursorcolumn "カーソル位置のカラムをハイライト表示しない
set whichwrap=b,s,h,l,<,>,[,] "左右のカーソル移動で行移動
set noswapfile "swapfileを生成しない
set norelativenumber "行の相対表示をやめる
set laststatus=2 "Always display the statusline in all windows
set showtabline=2 "Always display the tabline, even if there is only one tab
set tabstop=2 " タブを表示するときの幅
set shiftwidth=2 " タブを挿入するときの幅
set noshowmode "モード表示をOFF
set clipboard+=unnamed,autoselect " クリップボード
" set foldmethod=syntax "シンタックスに応じてzcでコードを折りたたむ
set foldlevel=100 "Don't autofold anything
set matchpairs& matchpairs+=<:> "対応括弧に<>を追加
set showmatch " 対応括弧をハイライト表示する
set matchtime=3 " 対応括弧の表示秒数を3秒にする
"prefix
nnoremap EE <C-w>
"Escape
inoremap ff <Esc>
vnoremap ff <Esc>
"インデント揃えてペースト
"インデント崩れるのでやめた
" nnoremap p p=`]
"ノーマルモードで改行してインサートモード
nnoremap <CR> A<CR><Esc>
"上スライド
nnoremap MM ddkkp
" nnoremap MM ddkkp=`]
"下スライド
nnoremap mm ddp
" nnoremap mm ddp=`]
"行複製
nnoremap tt ddPP
vnoremap tt dd<Esc>PP
" nnoremap tt ddPP=`]
"閉じ自動保管
inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>
inoremap < <><LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>
inoremap { {}<LEFT>
highlight Comment ctermfg=239
highlight Number ctermfg=09
highlight LineNr ctermfg=07
highlight Directory ctermfg=118
highlight RubyInstanceVariable ctermfg=208
highlight htmlTag ctermfg=15
highlight htmlEndTag ctermfg=15
autocmd BufRead,BufNewFile *.rb set filetype=ruby
autocmd BufRead,BufNewFile *.slim setfiletype slim
autocmd BufRead,BufNewFile jquery.*.js set ft=javascript syntax=jquery
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\""
"全角スペースをハイライト表示
function! ZenkakuSpace()
highlight ZenkakuSpace cterm=reverse ctermfg=DarkMagenta gui=reverse guifg=DarkMagenta
endfunction
if has('syntax')
augroup ZenkakuSpace
autocmd!
autocmd ColorScheme * call ZenkakuSpace()
autocmd VimEnter,WinEnter * match ZenkakuSpace / /
augroup END
call ZenkakuSpace()
endif
if dein#check_install()
call dein#install()
endif
msys2 + MinGW64 でWindows10にターミナル環境構築
ダウンロード
https://msys2.github.io/
から MSYS2 のインストーラを取得して実行。
アップデート・mingw他のインストール
$ pacman -Syuu
$ pacman -S base-devel
$ pacman -S mingw-w64-x86_64-toolchain
$ pacman -S openssh vim zsh tmux git
環境変数 PATH の設定(windows10の場合)
デフォルトでは、Windows の環境変数 PATH の設定を 引き継がない。
コントロールパネル → システムとセキュリティ → システム → システムの詳細設定 →詳細設定 → 環境変数 から
Windows の環境変数に MSYS2_PATH_TYPE を追加し、値を inherit に設定する。
デフォルトのシェルをzshに変更 (C:\msys64\msys2_shell.cmd を編集 )
#79行目付近# start "%CONTITLE%" "%WD%mintty" -i /msys2.ico /usr/bin/bash --login %1 %2 %3 %4 %5 %6 %7 %8 %9start"%CONTITLE%""%WD%mintty"-i/msys2.ico/usr/bin/zsh--login%1%2%3%4%5%6%7%8%9
ホームディレクトリを任意の場所に変更 (C:\msys64\etc\fstab を編集 )
# For a description of the file format, see the Users Guide# http://cygwin.com/cygwin-ug-net/using.html#mount-table# DO NOT REMOVE NEXT LINE. It remove cygdrive prefix from pathnone/cygdrivebinary,posix=0,noacl,user00C:/Users/◯◯/home/◯◯#追記
powerline
(pythonが動作しているか確認)
$ python
Python 2.7.9 (default, Mar 12015, 12:57:24)[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license"for more information.>>>exit()(などと表示されればOK)
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ pip install --user git+git://github.com/powerline/powerline
$ pacman -S socat
$ pip install psutil
$ pip install pyuv
vimのプラグイン管理(neobundle)・colorscheme
配置先のディレクトリを作成
$ mkdir -p ~/.vim/bundle
NeoBundleをリポジトリから取得
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
colorscheme(molokai)
$ mkdir ~/.vim
$ cd ~/.vim
$ mkdir colors
$ git clone https://github.com/tomasr/molokai
$ mv molokai/colors/molokai.vim ~/.vim/colors/
※tmuxを起動すると[exited]と表示されて強制終了する場合
- .tmux.conf で default-shell(command) の path を確認
- perl -pi -e 's/\r$//' ~/.tmux.conf を実行
※tmuxを起動すると勝手にbashが起動する場合 (~/.tmux.confを編集)
set -g default-shell /bin/zsh
TIPS:クリップボードからのコピー
インサートモードであればマウスの右クリック>ペーストで、システムのクリップボードに保存された情報を保存できる。ショートカットは使用しているターミナルの設定に依存する(GitBashならShift+Insert)
この技は-clipboardのvimでも有効。
sshでリモートログインしている時に重宝します。
Vimのプロファイル機能を使って反応の悪いプラグインを特定する
Clojureでの開発をNeoVim上で行う際、ファイルを開くのに時間がかかる場合があり、開発効率が落ちていました。その原因をVimのプロファイル機能を使って特定できたので、使い方を共有します。
手順
- Vimを起動し、遅い動作の手前まで作業を進める。
- 下記の3行をVimのコマンドウィンドウ内で入力する。
:profile start profile.log
:profile func *
:profile file *
- 遅い動作を実行する。
- 下記の2行をVimのコマンドウィンドウ内で入力する。
:profile pause
:noautocmd qall!
- カレントディレクトリ内に
profile.log
が作成されているはずなので、その内容を確認する。ファイルの末尾に概要が出力されているので、そこから遅いロジックを特定していく。
profile.logの出力例
FUNCTIONS SORTED ON TOTAL TIME
count total (s) self (s) function
1 8.584595 0.000036 nerdtree#ui_glue#invokeKeyMap()
1 8.584559 0.000131 77()
1 8.568358 0.000042 76()
1 8.568316 0.000028 <SNR>75_activateFileNode()
1 8.568288 0.000047 105()
1 8.568241 0.000034 122()
1 8.568115 0.000017 175()
1 8.568098 0.000055 176()
1 8.488279 0.006735 16()
2 8.093759 0.002042 ProjectionistDetect()
2 7.712956 0.002847 projectionist#activate()
40 7.418631 0.004057 projectionist#query()
40 7.407037 2.785267 projectionist#query_raw()
36 6.686320 0.001272 projectionist#query_exec()
2 5.947827 0.001345 <SNR>168_query_exec_with_alternate()
48720 3.367385 2.290765 <SNR>168_match()
490400 1.252515 projectionist#lencmp()
97440 0.871693 0.602253 <SNR>168_slash()
4 0.735650 0.000254 projectionist#query_file()
17 0.457497 0.286622 provider#python#Call()
FUNCTIONS SORTED ON SELF TIME
count total (s) self (s) function
40 7.407037 2.785267 projectionist#query_raw()
48720 3.367385 2.290765 <SNR>168_match()
490400 1.252515 projectionist#lencmp()
97440 0.871693 0.602253 <SNR>168_slash()
17 0.457497 0.286622 provider#python#Call()
14 0.284700 <SNR>166_nrepl_transport_dispatch()
97606 0.269994 projectionist#slash()
48720 0.202756 <SNR>168_startswith()
1 0.170747 0.170734 provider#pythonx#Require()
2 0.171497 0.150765 projectionist#navigation_commands()
8 0.108033 projectionist#define_navigation_command()
2 0.377909 0.044814 <SNR>152_projectionist_detect()
1 0.028492 <SNR>95_DirenvExport()
752 0.028444 <SNR>130_get_syn()
376 0.058135 0.025600 airline#highlighter#get_highlight()
2436 0.020623 <SNR>168_gsub()
5 0.018016 0.017663 fireplace#ns()
18 0.014815 <SNR>106_Highlight_Matching_Pair()
168 0.043886 0.013509 airline#highlighter#exec()
1 0.012891 0.012863 ctrlp#utils#writecache()
この場合は、vim-projectionist
という、プロジェクトのファイル構成を分析してファイル操作を支援したり、ソースファイルとテストファイル間のジャンプを実現してくれるプラグインに時間がかかっていることがわかります。私は最近では、ctrlpというプラグインでファイル操作を主に行っているので、このプラグインをコメントアウトすることにし、動作速度の改善を図ることができました。
何気に良く使うVim tips #2 単語を大文字/小文字にする
a_word# ^ カーソルは単語の中のどの文字でも
↓
大文字
viwU
(or
小文字
viwu
)
↓
A_WORD
vaffleでEXCELファイルをEXCELで開きたかったからvimrcに設定書いた
Windows ユーザーです。EXCELとか開くことが多いです。
昔は、vimfiler 使ってました。vaffle に乗り換えました。
x 押しても外部プログラム実行できないのつらい。
なのでちょっとしたスクリプト書いた。
autocmd FileType vaffle nmap x :call ExecuteFileByVaffle()<CR>function! ExecuteFileByVaffle()
execute "normal v$h\"ay"
execute "!start " . vaffle#buffer#extract_path_from_bufname(expand('%:p')) . '\' . @aendfunction
今カーソルのある位置のファイル名を取得して、単純に!start
コマンドで実行してるだけ。
詰まった点としては、特定のFileTypeタイプでマッピングする方法が分からずあせった(通常のファイル編集でx
押したらExecuteFileByVaffle()
が呼ばれたので)のと。ヤンクした文字列をどうやって!start
コマンドの引数にするのかで悩んだってところあたり。@a
がaレジスタに格納されている値を取り出せる魔法の文字列。その前のvaffle#buffer#extract_path_from_bufname(expand('%:p'))
は現在開いているvaffleのディレクトリの絶対パス名を取るためのおまじない。で、今のところはこれで何とかなりそうかなって思う。
「vimを使ってくれてありがとう」を表示させない
macのターミナルでvimを使っていると、タブのタイトルが「vimをつかってくれてありがとう」になることがある。
これを表示させないようにするためには、以下の行を.vimrcに追加
set notitle
neovimでテンプレートを用意した
はじまり
研究室に所属してから、emacsを習い…vimに手を出し…vim主軸の生活で基本的な操作に慣れました。その結果、pluginによる補完とかに興味を持ったので、pluginを管理する上でneobundleを扱うか、neovimに移行して、dein.vimを扱うかでneovimを選びました。
日々新しいプログラムを書き続けているわけではないものの、基本的情報が含まれたテンプレートってやっぱ便利そうじゃないですか。あと、スマートさを感じます。
そんなモチベーションでneovimでテンプレート読み込みをできるようにしました。
neovimとdein.vimについて
記事を書いてる方がたくさんいらっしゃるので、そちらをご参照ください。私は以下の記事などを参照しながら、設定しました。
thinca/vim-template
を使う
自作の環境設定を投稿されている方は多くて、いろいろ拝見させていただいたのですが、pluginを用いるのが初心者にはわかりやすいかなと思って、thinca/vim-templateを使用することにしました。
とりあえず、dein.toml
にどう書けばいいのかで、vim-template/doc/template.jaxとにらめっこした結果、動作するようになったのが以下の通りです。
[[plugins]]repo='thinca/vim-template'hook_add='''letg:template_basedir='~/.config'letg:template_free_pattern='template''''
neovimの設定ファイル置き場である.config
は以下のような構造にしています。template
ディレクトリ下にtemplate.*
と命名して置いておけば、空ファイルを読み込む際にテンプレートで開いてくれます。私はC言語、python、texのテンプレートを用意してます。
~/.config├── dein
│ ├── clang.toml
│ ├── dein.toml
│ └── dein_lazy.toml
├── nvim
|└── init.vim
└── template
├── template.c
├── template.py
└── template.tex
テンプレートを書いてみる
pythonのテンプレートを例に説明していきます。
#!/usr/bin/env python# -*- coding: utf-8 -*-## FileName: <+FILENAME+># CreatedDate: <+DATE+>#<+CURSOR+>
まだ、python初心者なこともあって、import
はテンプレートに書いていません。個人的に、ファイル名とファイル作成日は欲しいなぁと思っていたので、そうなるように書いてあります。
https://github.com/thinca/vim-template/blob/master/doc/template.jax
の記載そのままですが、以下のようにinit.vim
に書いておくと、<+FILENAME+>
,<+DATE+>
,<+CURSOR+>
を変換してくれます。
" テンプレート中に含まれる文字を置き換える
autocmd MyAutoCmd User plugin-template-loaded call s:template_keywords()function! s:template_keywords()silent! %s/<+DATE+>/\=strftime('%Y-%m-%d %T')/gsilent! %s/<+FILENAME+>/\=expand('%:r')/gendfunction" テンプレート中に含まれる'<+CURSOR+>'にカーソルを移動
autocmd MyAutoCmd User plugin-template-loaded
\ if search('<+CURSOR+>')
\ |silent! execute 'normal! "_da>'
\ |endif
<+FILENAME+>
拡張子抜きでファイル名が置換されます。<+DATE+>
テンプレートを読み込んだ時にイベントが発生するので、<+DATE+>
にファイル作成日が置換されます。気が向いた時に:w
で最終更新日も記入されるようにしたいものですね。<+CURSOR+>
カーソルの位置が移動されて、展開されます。このカーソル位置が指定できるのは、C言語やtexの時、恩恵を感じました。
template sample
参考になるかはわからないですが、一応晒します。
C言語
//// FileName: <+FILENAME+>// CreatedDate: <+DATE+>//#include<stdio.h>intmain(void){<+CURSOR+>return0;}
tex
%% FileName: <+FILENAME+>% CreatedDate: <+DATE+>%\documentclass{jsarticle}\title{<+CURSOR+>}\author{your name}\date{\today}\begin{document}\maketitle\end{document}
参照元
neovim
dein.vim
NeoVim と dein.vim を使ってみる!
NeoVim、そしてdein.vimへ
thinca/vim-template
Vim に typescript の環境を作る by dein
ドキュメントの通りだとうまく動かないのでメモ
はまったところ
- tsconfig.json 必須
- REAME.md にある \ 'cmd': {server_info->[&shell, &shellcmdflag, 'typescript-language-server', '--stdio']} だと --stdio が渡らない
- asyncomplete-lsp が asyncomplete とプラグインのファイル名が同じなので asyncomplete のファイルを上書きしてしまう.
LSP サーバのインストール
npm install -g typescript typescript-language-server
dein の設定
[[plugins]]
repo = 'leafgarland/typescript-vim'
[[plugins]]
repo = 'prabirshrestha/async.vim'
[[plugins]]
repo = 'prabirshrestha/vim-lsp'
hook_add = '''
if executable('typescript-language-server')
au User lsp_setup call lsp#register_server({
\ 'name': '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(), 'tsconfig.json'))},
\ 'whitelist': ['typescript'],
\ })
endif
let g:lsp_log_verbose = 1
let g:lsp_log_file = expand('~/vim-lsp.log')
'''
[[plugins]]
repo = 'prabirshrestha/asyncomplete.vim'
hook_add = '''
let g:asyncomplete_log_file = expand('~/asyncomplete.log')
let g:asyncomplete_auto_popup = 1
imap <c-space> <Plug>(asyncomplete_force_refresh)
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<cr>"
'''
[[plugins]]
repo = 'prabirshrestha/asyncomplete-lsp.vim'
merged = 0
Vim patchダイジェスト [2017/10] (仮)
Vim patchダイジェスト [2017/10] (仮)
(8.0.1169~ 8.0.1192)
- 8.0.1192: WindowsでHugeフィーチャー(デフォルト)でterminal機能が有効になっていなかったのを修正しました。
- 8.0.1191: オフィシャルのWindows用VimインストーラにGvimExtの32bit版と64bit版の両方および関連するDLLを含めるようにしました。
- 8.0.1190:
BufWritePre
イベント内で新しいウィンドウを開くと、Vimが使えなくなる件を修正しました。 - 8.0.1189:
E172
は有用ではないので削除しました。 - 8.0.1182: MzSchemeインターフェース用に
'mzschemedll'
と'mzschemegcdll'
を追加しました。 - 8.0.1178: WindowsのデフォルトのビルドにMSVC 2015を使うようにしました。(関連patch: 8.0.1183)
- 8.0.1177: terminalウィンドウ内でポップアップメニューがクリアされない件を修正しました。
- 8.0.1176:
Job_start()
が引用符とバックスラッシュを正しく処理しない件を修正しました。 - 8.0.1174: MacのTerminal.appでwhiteのカラーコードが間違っている件を修正しました。
- 8.0.1173: terminalウィンドウが
CTRL-L
後に再描画されない件を修正しました。 - 8.0.1172: オプションの設定で
E734
が発生してもオプションの値が変更されてしまう件を修正しました。 - 8.0.1170: termdebugプラグインを使用するとCPU使用率が100%になる件を修正しました。
- 8.0.1169:
'list'
と'cul'
をセットした場合、'list'
のhighlightが1文字分余計に表示されている件を修正しました。
凡例
表記 | 意味 |
---|---|
新機能、大幅な仕様変更 | |
'hoge' | オプション (:h options 参照) |
:hoge | Exコマンド (:h :index 参照) |
hoge() | 組み込み関数 (:h functions 参照) |
v:hoge | Vim定義済変数 (:h v: 参照) |
方針
こちらを参照。
ひとこと
Vim メモ
"+y
で、システムクリップボードにコピー。"+p
で、システムクリップボードからペースト