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

vimにフレンズの名前を補完する設定を追加してみた

$
0
0

img.png
上記をvimrcに追加
偶然写り込んだhiddenは気にしない
Screenshot from 2017-10-01 23-56-56.png
入力するとこんな感じで補完される
実用性があるかは不明


vimでaleとunite使ってるのでunite-aleを作った話

$
0
0

tl;dr


2017/9/30(土)のOsaka.vim #11にてALEの存在を知りました。
ALEはVim8/Neovimのプラグインでlintを非同期で実行してくれます。

この結果の一覧をUniteで表示/ジャンプしようというのがunite-aleです。

以下はALE/Rubocop(Ruby)を動かしてみたときのGIFです。
ale.gif

バグ

:Unite ale -no-quitしたときに<C-l><Plug>(unite-redraw)が実行されますが、これに対応していないので対応したいです。
誰か詳しい方PullRequest頂ければ嬉しいです。

あとはIssueで…

余談

開発に掛けた時間は以下のような感じになりました。

  • ALEのソースを読む: 10分
  • Uniteのsourceの作り方を調べる: 20分
  • コーディング: 5分

deniteで作れとのこと

以上

macOS+iTerm2+tmuxな環境でクリップボードを扱う(2017)

$
0
0

環境

  • 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" のチェックをつける

スクリーンショット 2017-10-05 11.31.02.png

reattach-to-user-namespace のインストール

tmux の中からクリップボードにアクセスするため、

$ brew install reattach-to-user-namespace

tmux の設定

~/.tmux.confに以下の行を追加

~/.tmux.conf
set-option -g default-command "reattach-to-user-namespace -l bash"

vim の設定

~/.vimrcに以下の行を追加

~/.vimrc
set clipboard=unnamed

Vimを起動した後に指定したコマンドを自動で実行させる方法

$
0
0

記事の内容はタイトルそのままですが、私はVimに glidenote/memolist.vim: simple memo plugin for Vim.というプラグインをインストールして活用しています。しかし、メモを取ろうとVimを起動する都度、以下の作業を行う必要があり、それが面倒でした。1

  1. Vimを立ち上げる
  2. :MemoNewコマンドを実行する
  3. メモのタイトルを入力する
  4. メモを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の標準コマンドは実行できます。


  1. Vimで日本語文章を編集していると途中から日本語入力が異常に遅くなったことがあったため、今のところ、日本語文章の編集はATOMで行なっています。 

[vim] 挿入モードで検索ハイライトを無効にする

$
0
0

概要

検索時のハイライトはありがたいけど、挿入する頃には鬱陶しいので消したい。
: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インストール

$
0
0

Chromebookにvimprocをインストール

  • Developer Modeにしていることが前提です

以下をインストールするとvimprocがコンパイルできます。

# crew install vim
# crew install gcc make
# crew install linuxheaders

※linuxheadersがポイントかも

ubuntuでvi/vimを使った時に打ち込みができない時の修正方法

$
0
0

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が使える)ビルド、インストール

$
0
0

参考にした情報

セットアップ(必要なプログラムのインストール)

# 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"にチェックをつける
image.png

あとは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ハイライトを編集してハイライトメモをつくる

$
0
0

リニューアルされたKindleのハイライトをまとめるページ。
以前に比べるとだいぶ見やすくなったが、まだ個人的には不満も多いので、コピペして自分なりに編集してからハイライトメモを作っている。

まずは、「Kindle メモとハイライト」のページに行き、ハイライトを取り出したい本を左ペインの中から選択する。
すると、ハイライトしたりメモ書きした内容が一覧で出てくるので、一番上の書籍名から一番下までをコピーして、vimに貼り付ける。(MacVim使ってます。)

コピペしたままだといろいろと不要な部分が残っているので、次のようなコマンドを実行してそれを削除する。

:%s/ピンク色の.*//g:%s/\s\s\+//g:%s/^\n\n\n/\r/g

ここで何をしているかというと、まず一行目は「ピンク色のハイライト...」という行を削除している。
ピンク色しか使っていないのでいつもこれだけだが、人によって色を使い分けていたりするとその色ごとに指定が必要になるので注意。

2行目では、何故か先頭からスペースを複数含んだだけの行が幾つか存在しているので、これを削除する。
おそらくハイライトページのデザインの関係で紛れ込んでいると思われるが、当然不要なので消してしまう。

最後に、行間を詰めるために改行だけが続いている部分を改行1つに置き直している。
これは好みなので、行間が広いほうがいいという場合には使わなかったりする。

あとは簡単に章立てを入れたり整形してから、PDF化してDropboxにおいている。

vim歴半年の初心者がvimrc晒す

$
0
0

環境

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にターミナル環境構築

$
0
0

ダウンロード

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 を編集 )

\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 を編集 )

\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を編集)

~/.tmux.conf
set -g default-shell /bin/zsh

TIPS:クリップボードからのコピー

$
0
0

インサートモードであればマウスの右クリック>ペーストで、システムのクリップボードに保存された情報を保存できる。ショートカットは使用しているターミナルの設定に依存する(GitBashならShift+Insert)

この技は-clipboardのvimでも有効。

sshでリモートログインしている時に重宝します。

Vimのプロファイル機能を使って反応の悪いプラグインを特定する

$
0
0

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 単語を大文字/小文字にする

$
0
0
a_word#  ^ カーソルは単語の中のどの文字でも

大文字

viwU

(or

小文字

viwu

)

A_WORD

vaffleでEXCELファイルをEXCELで開きたかったからvimrcに設定書いた

$
0
0

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を使ってくれてありがとう」を表示させない

$
0
0

macのターミナルでvimを使っていると、タブのタイトルが「vimをつかってくれてありがとう」になることがある。
これを表示させないようにするためには、以下の行を.vimrcに追加

set notitle

neovimでテンプレートを用意した

$
0
0

はじまり

研究室に所属してから、emacsを習い…vimに手を出し…vim主軸の生活で基本的な操作に慣れました。その結果、pluginによる補完とかに興味を持ったので、pluginを管理する上でneobundleを扱うか、neovimに移行して、dein.vimを扱うかでneovimを選びました。

日々新しいプログラムを書き続けているわけではないものの、基本的情報が含まれたテンプレートってやっぱ便利そうじゃないですか。あと、スマートさを感じます。

そんなモチベーションでneovimでテンプレート読み込みをできるようにしました。

neovimdein.vimについて

記事を書いてる方がたくさんいらっしゃるので、そちらをご参照ください。私は以下の記事などを参照しながら、設定しました。

thinca/vim-templateを使う

自作の環境設定を投稿されている方は多くて、いろいろ拝見させていただいたのですが、pluginを用いるのが初心者にはわかりやすいかなと思って、thinca/vim-templateを使用することにしました。

とりあえず、dein.tomlにどう書けばいいのかで、vim-template/doc/template.jaxとにらめっこした結果、動作するようになったのが以下の通りです。

dein.toml
[[plugins]]repo='thinca/vim-template'hook_add='''letg:template_basedir='~/.config'letg:template_free_pattern='template''''

neovimの設定ファイル置き場である.configは以下のような構造にしています。templateディレクトリ下にtemplate.*と命名して置いておけば、空ファイルを読み込む際にテンプレートで開いてくれます。私はC言語、python、texのテンプレートを用意してます。

tree
~/.config├── dein
  │   ├── clang.toml
  │   ├── dein.toml
  │   └── dein_lazy.toml
  ├── nvim
  |└── init.vim
  └── template
      ├── template.c
      ├── template.py
      └── template.tex

テンプレートを書いてみる

pythonのテンプレートを例に説明していきます。

template.py
#!/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+>を変換してくれます。

init.vim
" テンプレート中に含まれる文字を置き換える
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言語

template.c
//// FileName:       <+FILENAME+>// CreatedDate:    <+DATE+>//#include<stdio.h>intmain(void){<+CURSOR+>return0;}

tex

template.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

$
0
0

ドキュメントの通りだとうまく動かないのでメモ

はまったところ

  • 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] (仮)

$
0
0

Vim patchダイジェスト [2017/10] (仮)
(8.0.11698.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: :four_leaf_clover: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文字分余計に表示されている件を修正しました。

凡例

表記意味
:four_leaf_clover:新機能、大幅な仕様変更
'hoge'オプション (:h options参照)
:hogeExコマンド (:h :index参照)
hoge()組み込み関数 (:h functions参照)
v:hogeVim定義済変数 (:h v:参照)

方針

こちらを参照。


ひとこと

Vim メモ

$
0
0

"+yで、システムクリップボードにコピー。"+pで、システムクリップボードからペースト

Viewing all 5608 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>