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

vimからVisual Studio Codeへの乗り換え方【Mac】

$
0
0

概要

リモートの環境で開発するときにイヤイヤながらもvimで開発している人は
日本だけでも5万人いるらしいです。:confounded:(適当)

そんな人向けにGUIのエディタを使ってリモートで開発できる方法を公開します。

要は、ローカル(Visual Studio Code)からリモートの環境をいじる

環境

OS:Mac
sshfs
Visual Studio Code

手順

1.sshfsの準備

まずはsshfsを導入します。
この記事を参考にして導入してください。
読んで理解したとは思いますが、
導入した後に
下記コマンドでリモートのディレクトリをローカルのHogehogeディレクトリにマウントできるようになります。

sshfs [username]@[domain]:/path/to/dir/ Hogehoge

僕はいつも下記コマンドを打ちます。

sshfs -o follow_symlinks [username]@[domain]:/ Hogehoge

これでルート直下をそのままマウントするようにしているのと
デフォルトではマウント元のシンボリックリンクが動かないので
-o follow_symlinksをつけてシンボリックリンクを追うようにしています。

2.Visual Studio Codeの準備

ダウンロードをしていない方は
Visual Studio Code公式からダウンロードしてください

エディタをもっと便利にするためのおすすめ拡張機能はここから

VScodeでマウントしたリモートのファイルを開けばローカルで編集できる環境の構築完了です。

ただし、タイトルの通り今回のゴールはそこではありません。
vimから乗り換えてこそゴールです。

3.ターミナルからVScodeを開けるようにする

vimでファイルを開くときこうしますよね??

vim hoge.txt

これを VScodeでこんな感じで開きたくないですか?

code hoge.txt

実現できます!!:clap:

この記事を参考にして導入してください。

そうするとこんな感じでファイルを開いたり出来ます。
スクリーンショット 2017-07-21 17.24.24.png

ちなみに下記のようにコマンドを打つと
ディレクトリごと開けます!

code .

最後に

快適なGUIライフを♬


RaspberryPiでのVim設定について

$
0
0

RaspberryPiでのVim設定について

RaspberryPiでは、Vimを最初にインストールした時はシンタックスハイライトと自動インデント機能が有効になっていません。
なので、それらを有効にする手順を記載します。

注) 本記載内容は、Vimがインストールされていることが前提です。

Vimのインストールは以下のコマンドで行います。

sudo apt-get install vim

シンタックスハイライトと自動インデント機能の有効化

まず、以下のコマンドでVimの設定ファイルを開きます。

sudo vi /etc/vim/vimrc

以下の2箇所がコメントアウトされているので、「" (ダブルクォーテーション)」を外してコメントアウトを解除します。

[シンタックスハイライト]

vimrc
syntaxon

[自動インデント機能]

vimrc
if has("autocmd")filetype plugin indent onendif

これで、シンタックスハイライトと自動インデント機能が有効になります。

atom userがneovimへ...

$
0
0

atom user が neovim に移行してみました。

なぜ?? Vimerに?!

 最近までatom userの僕がなぜneovimを使おうと思ったのか...
 今までatomでの開発に事足りていたが最近、ラズパイや仮想サーバーを借りて開発するるようになったため、terminalでコードを書くことが増えてきました。

vimでよくない??

 そー言う方も少なくないと思います。なのでneovimのいいところ、メリットを上げていきたいと思います。

  • 強力なデフォルト
  • truecolor や bracketed paste のようなモダンなターミナル機能
  • 組み込みターミナルエミュレータ(:terminalで呼び出せる) などがあげられます。

使うっきゃないですね👍

それでは早速インストールから始めます

Install

mac


brew install neovim/neovim/neovim

ubuntu


sudo apt-get install software-properties-common
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:neovim-ppa/stable
sudo apt-get update
sudo apt-get install neovim

Setting

neovimの設定ファイルの場所はデフォルトは $HOME/.config/nvim/init.vimです。ここに設定を書き込んでいきます。

Contents

今、僕が設定している、最低限設定

Set


~/.config/nvim/init.vim
sett_Co=256"screen が 256色"set termguicolors  "True Colorを使用"set number "桁表示"setbackspace=indent,eol,start
setmouse=a   "マウス有効"setlaststatus=2"ステータスラインの表示"set list "スペースの可視化"setlistchars=tab:»\ ,trail:-,extends:»,precedes:«,nbsp:% "space 対応"setclipboard=unnamed "clipbordと対応"set ruler "カーソルが何行目の何列目に置かれているかを表示"set autoindent "改行時に前の行のインデントを継続する"settabstop=2"画面上でタブ文字が占める幅"setsofttabstop=2"連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅"setshiftwidth=2"自動インデントでずれる幅"set expandtab "タブ入力を複数の空白入力に置き換える"set cursorline "横のカーソルライン表示"set cursorcolumn "縦のカーソルライン表示"set smartindent "改行時に入力された行の末尾に合わせて次の行のインデントを増減する"

change command


~/.config/nvim/init.vim
inoremap <silent> jj <ESC> "escape insert mode

vim-go


~/.config/nvim/init.vim
vim-go
let g:go_template_autocreate =0let g:go_fmt_command ="goimports"let g:go_highlight_functions =1let g:go_highlight_methods =1let g:go_highlight_structs =1let g:go_highlight_operators =1let g:go_term_enabled =1let g:go_highlight_build_constraints =1let g:deoplete#sources#go#align_class =1let g:deoplete#sources#go#sort_class =['package', 'func', 'type', 'var', 'const']let g:deoplete#sources#go#package_dot =1

quick-run


~/.config/nvim/init.vim
quick-run
let g:quickrun_config ={'*': {'hook/time/enable': '1'},}

dein settings


~/.config/nvim/init.vim
" dein settings {{{"" dein自体の自動インストール"let s:cache_home = empty($XDG_CACHE_HOME) ? expand('~/.cache') : $XDG_CACHE_HOMElet s:dein_dir = s:cache_home . '/dein'let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'if !isdirectory(s:dein_repo_dir)
  call system('git clone https://github.com/Shougo/dein.vim ' . shellescape(s:dein_repo_dir))
endif
let&runtimepath= s:dein_repo_dir .",". &runtimepath
" プラグイン読み込み&キャッシュ作成"let s:toml_file = fnamemodify(expand('<sfile>'), ':h').'/dein.toml'if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir)
  call dein#load_toml(s:toml_file)
  call dein#end()
  call dein#save_state()
endif
"不足プラグインの自動インストール"if has('vim_starting')&& dein#check_install()
  call dein#install()
endif
"}}}"

nvim term


~/.config/nvim/init.vim
syntax enable
colorscheme atom-dark

plugins


 僕の場合はファイルを分けて、書きます。ファイルは$HOME/.config/nvim/dein.tomlです。

~/.config/nvim/dein.toml
[[plugins]]repo='Shougo/deoplete.nvim'[[plugins]]repo='itchyny/lightline.vim'[[plugins]]#toml syntaxrepo='cespare/vim-toml'on_ft='toml'[[plugins]]repo='gosukiwi/vim-atom-dark'[[plugins]]repo='fatih/vim-go'[[plugins]]repo='zchee/deoplete-go'[[plugins]]repo='plasticboy/vim-markdown'[[plugins]]repo='thinca/vim-quickrun'

こんな感じの見た目です。
Screen Shot 2017-07-24 at 12.16.44 AM.png

Reference


Vimのspellチェックでハイライト色を変更したい

$
0
0

編集

間違ったスペルに下線、間違ったキャメルケースに下線と太字を設定する

.vimrc
setspellsetspelllang=en,cjk

hi clear SpellBad
hi SpellBad cterm=underlinehi clear SpellCap
hi SpellCap cterm=underline,bold

結果

Before

before.png

After

after.png

Kill Line in Vim

$
0
0

日本語入力を快適にするため、インサートモードでは、 Emacs のキーバインドで操作できるようにしている。

C-kで Emacs の Kill Line的な操作をするためには、下記の設定を ~/.vimrcに書けばOK

~/.vimrc
inoremap<C-k><C-o>:call setline(line('.'),col('.')==1 ? '' : getline('.')[:col('.')-2])<CR>

ただこれだと一回ノーマルモードに戻ってしまうので、 autocmd InsertLeaveなどのフックがあると発動してしまう。課題。

~/.vimrc
autocmd InsertLeave * call system('fcitx-remote -c')

memolist.vimのgrepをDeniteのgrepにする

$
0
0

memolist.vimという便利なmemo取りpluginがあります。
軽量で使いやすくオススメなのですが、ここがなーと思っている箇所がありました。
MemoGrepというcommandがありますが、この実装はVimGrepをしているのです。

function! memolist#grep(word)
  let word = a:word
  if word == ''
    let word = input("MemoGrep word: ")
  endif
  if word == ''
    return
  endif

  try
    if get(g:, 'memolist_qfixgrep', 0) != 0
      exe "Vimgrep -r" s:escarg(word) s:escarg(g:memolist_path . "/*")
    else
      exe "vimgrep" s:escarg(word) s:escarg(g:memolist_path . "/*")
    endif
  catch
    redraw | echohl ErrorMsg | echo v:exception | echohl None
  endtry
endfunction

あれ?オプションlet g:memolist_denite = 1でDenite grepしてくれると思ってたのに…(´・ω・`)
ゆるふわ系VimmerとしてはVimGrepはハードボイルド過ぎるのでDenite grepをするようにしてみました。

" 適当にvimrcにでも書いて下さい

function! s:memoGrepDenite()
    let l:option = '-path=' . expand('$HOME/path/to/memolist')
    exe 'Denite' 'grep' l:option '-highlight-mode-insert=Search'
endfunction

command! MemoGrepDenite call s:memoGrepDenite()<CR>

これで:MemoGrepDeniteコマンドができて、ホクホク(・∀・)

Google Cloud Shell が少し進化した

$
0
0

ローカルを汚したくないのでCloud Shell愛用している勢,歓喜.

tl;dr

他にも何か見つけたら教えて頂きたい.

少し解説

フォントサイズ設定

実は以前から Ctrl + =/-で微調整は可能だった.
=は英字キーボード上 +と同じキー. Shift + =+

Chromeでショートカット登録

URLが割り当てられたため,デスクトップなどから直接起動させられるようになった.
ChromeOSでは特に便利.

vimでvisual block mode

これまではシェル自体に Ctrl + C/Vがコピペとしてアサインされており,vimに Ctrl + Vが渡せなかった.
設定にて Ctrl + Shift + C/Vに切り替えられるようになったため,visual block modeが使用可能になった.

clearコマンド

つい最近まで使えなかった.
なぜこのタイミングなのかは謎.なぜ使えなかったのかも謎.

公式アナウンスも来ていた

Cloud Shell’s code editor now in beta

ちなみに上記記事内,(確か前からあった機能だが)エディタは予測変換なんかも出来て案外便利
.vueが未対応なので,個人的にはエディタはほぼ使っていない)
content assist

そもそもCloud Shellで出来ること

そのうち別記事で書く.

個人的にエディタに欲しい

  • .vueファイル対応
  • Ctrl + CEscの代わりに(vi key bindings)
  • というかplugins使えるようにして欲しい(orion ideベース,元来は使える)

デバッグ系もないが,個人的には事足りている.

 

 

[Vim] [Python] jedi-vimとマルチバイト文字まわりのバグ?

$
0
0

詳しくは自分のブログに書いたのですが、Pythonの開発環境をPyCharmからVimに乗り換えました。

いままで外部プラグインを使わない派で一年間Vimmerやってきたんですが、気の迷いでプラグインも入れてしまいました(最小限ですが)。

今回Pythonまわりのプラグインでめっちゃ便利なjedi-vimっていう有名所のやつを入れたんですが、バグっぽい挙動を見つけたので書いておきます。

ググったけど同じ症状の人見なかったのでぼくの環境がおかしいのかもしれません。またプラグインのバッティングの可能性もあるかと思います。

対策をご存じの方、ご教授いただけると幸いです。

環境

  • OS : OS X EL Capitan 10.11.6
  • VIM: 8.0
  • jedi:0.10.2

現象

日本語(マルチバイト文字)が入っていると補完が効かない

autocomp.gif

上記画像で言うと"パワーマン {}"のあとの.formatが保管されていません。

s = "パワーマン {}"のように変数に入れれば、s.のあとで補完が効くようになります。

日本語(マルチバイト文字)が入っていると変数リネームが失敗する

rename.gif

リネーム実行後"パワーマン {}".format(hoge)となって欲しいところが"パワーマン {hogeformat(num)になってしまっています。

導入してみての感想

IDEのVimモードも良いですが、やはりVimそのものを使えるというのはかなりのメリットだと感じました。ただし、内包表記でちょっと複雑な変数リネームなどをやるとうまくいかなかったりと、保管機能やリファクタリングにおいてはIDE(PyCharm)のコード分析に軍配が上がると言った印象です。

ここらへんは好みの問題だと思うので、まずはVimで引き続き開発してみようと思います。

.vimrc

"------- Preferences --------"setttyfastsett_Co=256sethiddensetautoreadsethistory=2000setnoswapfilesetbackspace=start,eol,indent
setambiwidth=double
setshortmess+=I
setnrformats=setbackupsetbackupdir=$HOME/vimbackup

setsmartindentsettabstop=4setautoindentsetexpandtabsetshiftwidth=4setshowmatchsetmatchtime=1setformatoptions-=csetsmarttabsetclipboard=unnamed,autoselect

"ハイフンを単語に含めるsetisk+=-"スペルチェック時に日本語を除外するsetspelllang=en,cjk

" インサートモードから抜けるときにペーストモードを解除する
autocmd InsertLeave * setnopaste"syntax markdownauBufRead,BufNewFile *.md setfiletype=markdown

setencoding=utf-8setfileencodings=ucs-bom,utf-8,euc-jp,iso-2022-jp,cp932,utf-16,utf-16le
"set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8setfileformats=unix,dos,mac

"------- Look&Feel -----"setrulersetnumbersyntaxonfiletypeonfiletype plugin onfiletype indent onsettitlesetshowcmdsetcmdheight=2setlistsetlistchars=tab:>-,trail:-,nbsp:%,extends:>,precedes:<,eol:<setdisplay=lastline
setpumheight=10"colorscheme distinguished"colorscheme railscasts"colorscheme grb256"colorscheme darcula"colorscheme molokaicolorscheme badwolf
auBufNewFile,BufRead *.ejs setfiletype=html


"------- Cursor -----""挿入モードでカーソル形状を変更するlet&t_SI.="\e[6 q"let&t_EI.="\e[2 q""カーソル形状がすぐに元に戻らないのでタイムアウト時間を調整setttimeoutlen=10"挿入モードを抜けた時にカーソルが見えなくなる現象対策(なぜかこれで治る)inoremap<ESC><ESC>setmouse=a"------- StatusLine -----""http://blog.ruedap.com/2011/07/12/vim-statusline-git-branch-name"プラグイン必要だったので今は設定しない。替わりに下記を設定"http://qiita.com/sizucca/items/40f291463a40feb4cd02"自動文字数カウント
augroup WordCount
    autocmd!
    autocmd BufWinEnter,InsertLeave,CursorHold * call WordCount('char')
augroup END
let s:WordCountStr =''let s:WordCountDict = {'word': 2,'char': 3,'byte': 4}
function! WordCount(...)ifa:0==0return s:WordCountStr
    endiflet cidx =3silent!let cidx = s:WordCountDict[a:1]
    let s:WordCountStr =''let s:saved_status =v:statusmsg
    exec "silent normal! g\<c-g>"ifv:statusmsg !~'^--'let str =''silent!let str = split(v:statusmsg,';')[cidx]
        let cur = str2nr(matchstr(str,'\d\+'))letend= str2nr(matchstr(str,'\d\+\s*$'))ifa:1=='char'            " ここで(改行コード数*改行コードサイズ)を'g<C-g>'の文字数から引くletcr=&ff=='dos' ? 2 : 1let cur -=cr * (line('.')-1)letend-=cr * line('$')endiflet s:WordCountStr = printf('%d/%d', cur,end)endifletv:statusmsg = s:saved_status
    return s:WordCountStr
endfunction"ステータスラインにコマンドを表示setshowcmd"ステータスラインを常に表示setlaststatus=2"ファイルナンバー表示setstatusline=[%n]
"ホスト名表示setstatusline+=%{matchstr(hostname(),'\\w\\+')}@
"ファイル名表示setstatusline+=%<%F
"変更のチェック表示setstatusline+=%m"読み込み専用かどうか表示setstatusline+=%r"ヘルプページなら[HELP]と表示setstatusline+=%h"プレビューウインドウなら[Prevew]と表示setstatusline+=%w"ファイルフォーマット表示setstatusline+=[%{&fileformat}]
"文字コード表示setstatusline+=[%{has('multi_byte')&&\&fileencoding!=''?&fileencoding:&encoding}]
"ファイルタイプ表示setstatusline+=%y"------- netrw -----""http://blog.tojiru.net/article/234400966.html  " netrwは常にtree viewletg:netrw_liststyle =3" CVSと.で始まるファイルは表示しないletg:netrw_list_hide ='CVS,\(^\|\s\s\)\zs\.\S\+'" 'v'でファイルを開くときは右側に開く。(デフォルトが左側なので入れ替え)letg:netrw_altv =1" 'o'でファイルを開くときは下側に開く。(デフォルトが上側なので入れ替え)letg:netrw_alto =1"------- Search --------"setincsearchsetignorecasesetsmartcasesetwrapscansethlsearch":grepコマンドをackに変更setgrepprg=ack\ --nogroup\ --column\ $*
setgrepformat=%f:%l:%c:%m"------- & command --------"nnoremap& :&&<CR>
xnoremap & :&&<CR>"現在の選択範囲を検索する
xnoremap * :<C-u>call<SID>VSetSearch()<CR>/<C-R>=@/<CR><CR>
xnoremap # :<C-u>call<SID>VSetSearch()<CR>?<C-R>=@/<CR><CR>function! s:VSetSearch()let temp = @s
  norm! gv"sylet @/ = '\V' . substitute(escape(@s, '/\'), '\n', '\\n', 'g')let @s = temp
endfunction"quickfixリストに含まれるファイル名を引数リストに設定する
command!-nargs=0-bar Qargs execute 'args' QuickfixFilenames()function! QuickfixFilenames()let buffer_numbers = {}
  for quickfix_item in getqflist()let buffer_numbers[quickfix_item['bufnr']] = bufname(quickfix_item['bufnr'])endforreturnjoin(map(values(buffer_numbers),'fnameescape(v:val)'))endfunction"------- plugins --------"
runtime macros/matchit.vim" Specify a directory for plugins" - For Neovim: ~/.local/share/nvim/plugged" - Avoid using standard Vim directory names like 'plugin'call plug#begin('~/.vim/plugged')" Make sure you use single quotes" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align" gaでテキスト揃え
Plug 'junegunn/vim-easy-align'" Pythonの自動補完
Plug 'davidhalter/jedi-vim'" KillRing的なやつ
Plug 'LeafCage/yankround.vim'" vで選択範囲を拡大、C-vで選択範囲を戻す
Plug 'terryma/vim-expand-region'" C--2回押しで選択範囲をまとめてコメントアウト
Plug 'tomtom/tcomment_vim'" gxでカーソル下のURLをブラウザで開く(URLでなければ検索結果を開く)
Plug 'tyru/open-browser.vim'" テキストを囲うものを様々に編集
Plug 'tpope/vim-surround'" 閉じカッコの自動挿入
Plug 'cohama/lexima.vim'" インデントの可視化
Plug 'Yggdroot/indentLine'" 候補絞り込み型インターフェース
Plug 'kien/ctrlp.vim'" CtrlPの拡張プラグイン. 関数検索
Plug 'tacahiroy/ctrlp-funky'" CtrlPの拡張プラグイン. コマンド履歴検索
Plug 'suy/vim-ctrlp-commandline'" CtrlPの拡張プラグイン 3つの機能が同梱
Plug 'sgur/ctrlp-extensions.vim'" vimからagを利用する
Plug 'rking/ag.vim'" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips'| Plug 'honza/vim-snippets'" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }

" Plugin options
Plug 'nsf/gocode', { 'tag': 'v.20150303','rtp': 'vim' }

" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf','do': './install --all' }

" Initialize plugin systemcall plug#end()"------- plugin settings --------"" ctrlp" let g:ctrlp_match_window = 'order:ttb,min:20,max:20,results:100'" .(ドット)から始まるファイルも検索対象にするletg:ctrlp_show_hidden =1" ファイル検索のみ使用letg:ctrlp_types = ['fil'] 
" CtrlPの拡張指定letg:ctrlp_extensions = ['funky','commandline','yankring'] 
"C-pでCtrlPMenuが起動するようにletg:ctrlp_map ='<c-p>'letg:ctrlp_cmd ='CtrlPMenu'" CtrlPCommandLineの有効化
command! CtrlPCommandLine call ctrlp#init(ctrlp#commandline#id())" CtrlPFunkyの有効化letg:ctrlp_funky_matchtype ='path'letg:ctrlp_cache_dir = $HOME.'/.cache/ctrlp'letg:ctrlp_clear_cache_on_exit =0letg:ctrlp_max_files           =100000letg:ctrlp_mruf_max            =500letg:ctrlp_yankring_limit =100letg:ctrlp_custom_ignore = {
  \ 'dir':  '\v[\/]\.?(git|hg|svn|cache|emacs\.d|node_modules)$',
  \ 'file': '\v\.(exe|so|dll|dmg|tar|gz|c4d|DS_Store|zip|mtl|lxo|psd|ai|eps|pdf|aep|jpe?g|png|gif|tif|swf|svg|obj|fbx|mov|mp[3-4])$',
  \ 'link': 'some_bad_symbolic_links',
  \ }

" jedi-vim" docstringポップアップを無効化
autocmd FileType python setlocalcompleteopt-=preview

" indentLine" 任意のファイルタイプで無効化するletg:indentLine_fileTypeExclude = ['help','markdown']

"------- Keymap -----"inoremap<C-c><ESC>noremap<C-c><C-c> :nohlsearch<Cr><Esc>setwhichwrap=b,s,h,l,<,>,[,],~let mapleader ="\<Space>"nnoremap<Leader>s :w<CR>nnoremap<Leader>/ /\vnnoremap<Leader>?  ?\vnnoremap Y y$
nnoremap+<C-a>nnoremap-<C-x>
cnoremap <C-p><Up>
cnoremap <C-n><Down>nnoremapj gj
nnoremapk gk
nnoremap gj jnnoremap gk knnoremap<silent><C-l> :<C-u>nohlsearch<CR><C-l>
cnoremap <expr> %% getcmdtype()==':' ? expand('%:h').'/' : '%%'setpastetoggle=<f5>
map <f6> :!open -a textedit %<CR>" Start interactive EasyAlign in visual mode (e.g. vipga)
xmap ga <Plug>(EasyAlign)" Start interactive EasyAlign for a motion/text object (e.g. gaip)
nmap ga <Plug>(EasyAlign)" 選択範囲を広げる
vmap v<Plug>(expand_region_expand)" 選択範囲を戻す
vmap <C-v><Plug>(expand_region_shrink)" カーソル下のURLをブラウザで開くletg:netrw_nogx =1" disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)

まとめ

外部プラグイン入れはじめて数日なので、設定まわりで僕が変なことをやっちゃってる可能性も否めませんが、直す方法が見つかればいいなぁと思っています。

元記事

Vim: Python開発環境を作る - kick the base


vimrcを書くのが面倒なら Ultimate vimrc を導入してみよう

$
0
0

Ultimate vimrc とは

The Ultimate vimrc

Amir Salihefendic 氏が配布している ぼくのかんがえたさいきょうのvimrcです

導入

以下の Basic もしくは Awasome のどちらかをインストールします

basic (基本版) インストール

# git clone --depth=1 git://github.com/amix/vimrc.git ~/.vim_runtime
# sh ~/.vim_runtime/install_basic_vimrc.sh

Awasome (拡張版) インストール

# git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
# sh ~/.vim_runtime/install_awesome_vimrc.sh

使用感

これから

インストール後に顔文字が出てかわいい

# sh ~/.vim_runtime/install_awesome_vimrc.sh
Installed the Ultimate Vim configuration successfully! Enjoy :-)

Neovim choosing things

$
0
0

Hello World..
in this post I will to explait what I did with my neovim, of course everything is only opinion and my perception.

QWERTY vs Devorak-Programmer

First of all, my maps is thinking in the layout Devorak-Programmer
Reason: Vim got into my head I sould moven my fingers the as little as possible.
and the fact was difficult and frustanting learn a new keybord layout then the question is... worth it? Well for me ... yes
Well about the speed no, perhaps you can go quickly or don't but really I don't thing is important I am sure can be fast in any keyborad layout then for me about confort because is easy add shorcuts (map) to neovim using simbols like ;,'-/ and I feel my finger has to move less
the bad thing is the numbers I don't like the position

Vim vs Emacs

I don't know Emacs, but in the beginnig always we have this quesion, then one day instead of search in google "vim vs emacs" and read reviews I prefer start to learn emacs then I could do my own opinion then I cose vim becuse I don't like to use "ctrl" or "alt" I remember that in emacs a lot of shortcuts you need this key including simple thigs like copy, paste, delete the line etc. I don't want to move my hand just my fingers, in fact in my init.vim I have in map the most case that I need to use "ctrl" or "backspace" (splits)

Vim vs Neovim

When I chose neovim because they plane to use lau like one alternative of vimL and also the community is refactoring the code then for me like a newbie I perfer a simple code if one day I become a collaborator.

Gvim vs Neovim

the main advantage of gvim is the color you know a beautiful colorschema but now this isn't problem in terminal because we have "true color" then the terminal can render colors like a gui and also in the terminal we have tmux is cool.

Right now I use Tilix

Tabs vs Buffers

I don't think that this are enemy depend wich is your workflow.
example if I want edit randoms files I use buffers but like a webpage I use tabs because in split I can see the css, js, html

The problem with split can be the space, use this plugin
and create your own map. vzoom

Plug 'KabbAmine/vZoom.vim', {'on': ['(vzoom)', 'VZoomAutoToggle']}

Ctrlp vs Unit

When I test Unit was slow I don't know now his speed but with ctrlp I don't have problems with the speed.
if you like ctrlp use take this nice plugins

Plug 'tacahiroy/ctrlp-ssh'
Plug 'fisadev/vim-ctrlp-cmdpalette'
Plug 'jasoncodes/ctrlp-modified.vim'
Plug 'DavidEGx/ctrlp-smarttabs'
Plug 'tacahiroy/ctrlp-funky'
Plug 'ivalkeen/vim-ctrlp-tjump'
Plug 'roberbnd/ctrlp-mpc.vim'

Ctrlp vs Neovim-fuzzy

Depends your situation
Neovim-fuzzy is very very fast but don't have cache
ctrlp is slow in the first time because load in the cache the files
Then
If we use like SSHFS or working in a project ctrlp is nice.
If a fast general file Neovim-fuzzy is perfect

also ctrlp is very configurable like to show or don't hide files.

Save session

We have 2 main option to save our session
https://github.com/xolox/vim-session
https://github.com/mhinz/vim-startify
I perfer vim-session to save time in startup but both are nice.

Neovim and Ctags

https://andrew.stwrt.ca/posts/vim-ctags/

Like you can learn is tedoius manager the tags I recommend this plugin
vim-gutentags

Common Plugins

vim-easymotion: This is my main plugin because generally I don't use "j,k,l,h" I leap from side to side
nerdtree: I don´t think is necessary neerd tree i wrote an article about this, However I installed it because I was bored.
vim-plug: I perfer vim-plug is very fast.

Git conflict using (Neo)vim

Learn vimcasts with Fugitive.vim Tutorial

Genaral Things

I don't have set numbers because airline say the position and I think is better save this space.

Remember the last position when reopen a file.
*in some place of internet exists a plugin for this operation don't use it (I don't remmember the name).

" This will jump to the last known cursor position unless:
"     the position is invalid
"     the position is inside an event handler
if has("autocmd")
  au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
endif

Favorite links

https://twitter.com/oss_viml
http://vimcasts.org/
http://www.vimgolf.com/
http://vimcolors.com/
http://www.bestofvim.com/

Learn VimL:
https://www.ibm.com/developerworks/library/l-vim-script-1/
http://learnvimscriptthehardway.stevelosh.com/

vimでunityする

$
0
0

プラグイン紹介

Unityするvimmer向けにプラグイン作りました

  • vimからコマンド一発で実行する
  • vimからUnityのメニューを実行する(エディタ拡張機能メニュー等)

zebult/univim

使い方

  • Play
    :UnivimPlay

  • Find
    :UnivimFind

  • Menu
    :UnivimMenu YOUR_ORIGINAL_MENU

    UnityのHelp検索で一番上にヒットしたメニューが実行されます

Vimmerがプログラミングを書くときの疑問(括弧編)

$
0
0

この記事について

vimを初めて1ヶ月にも満たない初心者がvimについての疑問を投げかけて,僕みたいな初心者や先輩方と情報を共有するために書きました.

初めに

  • vimにはノーマルモードとインサートモードがあります.
  • ノーマルモードでは"hjkl"でカーソル移動できます.
  • インサートモードでは文字の入力ができます.この時のカーソル移動はカーソルキーでできます.(できれば使わないほうが良い.)

疑問

  • {}, (), "", [] などの括弧を記述するときはどのような手順で行うのが一般的なのだろうか?

function(10, value);みたいな関数を記述したいとする.
カーソルが'@'にあるとします.
1. function(@
2. function();@
3. function(@);
4. fucntion(10, value@);
5. function(10, value);@

「返し括弧を後から書けばいいや無いか!」という方もいらっしゃるとは思いますが,個人的には括弧のつけ忘れを逃れたいので,このような書き方を望んでいます.(括弧のハイライトやジャンプできるじゃん.)

提案

調べたり,自分で考えてみた結果,以下の方法を見つけた.
- ノーマルモードに戻って移動する
- インサートモードで矢印キーを使う
- Ctrl-oで一度だけのノーマルモードを許してもらう
- .vimrcに記述する(インサートモードでの移動コマンドの登録)

今は矢印キーでの移動をしている.

最後に

自分勝手ですが,情報提供おねがいします.

最新版の Vim で :terminal コマンドを使えるようにする

$
0
0

ブログ記事からの転載です。

最近何かと話題の Vim の :terminalですが、使用する場合は最新版のソースコードからビルドする他にも configure時に --enable-terminalを追加する必要があります。

$ ./configure --with-features=huge --enable-terminal

これで :terminalコマンドが使えるようになります。

細かいビルド方法などは以下のサイトを参考にしてください。

lessコマンドを綺麗に表示する

$
0
0

lessコマンドを打つ度に、味気ない単色のファイル結果が表示されていて、使ってるvimのカラーをそのまま持ってこれないかと思っていたらそのままlessコマンドにも適用出来るらしいので、その方法をメモしておきます。

Macの方法になります

方法

// 現在のディレクトを確認
$ pwd

// 結果
/Users/自分のusernameと返ってくるはず


// /usr/share/vim数字/macrosディレクトリまで移動する
$ cd ../../usr/share/vim74/macros/

// less.shがあればOK
$ ls -la

// vimのカラースキーマで見たいファイルを
/usr/share/vim74/macros/less.sh ファイル名

とすればお使いのvimのカラースキーマで確認できる

Aliasの設定

ただいちいちパスを打つのは入力が多くしんどいので、aliasを作っておく

bash

// vimでbash_profileを開く
vi .bash_profile

// .bash_profileに以下を入れて保存する
alias less="/usr/share/vim/vim74/macros/less.sh"

//.bash_profileを保存編集し終わったら、反映を忘れない
$ source ~/.bash_profile

zsh

// vimで.zshrcを開く
vi .zshrc

// .zshrcに以下を入れて保存する
alias less="/usr/share/vim/vim74/macros/less.sh"

// .zshrcを保存したら、反映
source ~/.zshrc

以上でvimのようにlessコマンドでファイルを表示させることができます。

さらにlessコマンドでファイルを表示中にvを押すとそのまま、vimとして編集も出来るようになります。

VimでMacのControlキーショートカットを使う

$
0
0

Vimを使っているけど,モードの切り替えなんてめんどくさい!
Macのショートカットキーをそのまま使いたい!
という人のために挿入モード中にMacのControlキーショートカットを使えるように設定してみました.
Ctrl+Kの挙動以外はそのままマップするだけです.
また今回は,友人が必要だと思ったものだけ設定しています.

.vimrc
function! Expand_delete_line()if getline('.')==''|| matchstr(getline('.'),'.',col('.'))==''
        normal gJ
    else
        normal d$$
    endifendfunctionsetvirtualedit=onemore
inoremap<C-a><C-o>^
inoremap<C-e><C-o>$
inoremap<C-f><C-o>linoremap<C-b><C-o>hinoremap<C-p><C-o>kinoremap<C-n><C-o>jinoremap<C-d><C-o>xinoremap<silent><nowait><C-k><C-o>:<C-u>call Expand_delete_line()<CR>

参考文献

VimScriptざっくりチュートリアル(関数編)
[Vim] カーソル位置の文字を取得 + Vim における文字列について
vimで最終行が空行だったら保存時に最終行を削除する方法
Macが異常に捗るControlキーショートカットまとめ


[Vim] taglist.vimプラグインをPHPで使うときに知っておくと嬉しいctags設定

$
0
0

はじめに

taglist.vimプラグインを使っている方は多いのではないかと思います。
定数やメソッドを一覧表示する機能を提供してくれるのでとても便利です。
このプラグインctagsを使っているようなのですが、
ctagsのデフォルトの設定ではconstで定義されたPHPのクラス定数は定数と扱われず、
constant欄に表示されません。

constで定義されたPHPのクラス定数をconstant欄に表示させるには?

man ctagsによると、$HOME/.ctagsにctagsコマンドのオプションを記述しておけるらしいです。
.ctagsファイルを作成していないようでしたら作成し、下記の設定を追加してください。

.ctags
--php-kinds=cfd 
--regex-php=/^[ \t]*const[ \t]+([a-z0-9_]+)/\1/d/i 

--regex-<LANG> という正規表現が使えるオプションを使って、
constを定数とみなす設定をしているわけです。

:Tlistするとconstantにconstで定義した定数が表示されています。

無題.png

MSYS2のvimでも:terminalを使えるようにする

$
0
0

やることは単純である

必要なツールのインストール

$ pacman -S base-devel msys2-devel
$ pacman -S python3 ruby
$ pacman -S ncurses-devel libcrypt-devel gettext-devel

luaのビルドとインストール

$ curl -R -O http://www.lua.org/ftp/lua-5.3.4.tar.gz
$ tar zxf lua-5.3.4.tar.gz
$ cd lua-5.3.4
$ make mingw
$ cp /src/lua54.dll /usr/local/bin/lua54.dll

MSYS2の開発者用リポジトリをクローン & vimをビルド

$ git clone https://github.com/Alexpux/MSYS2-packages.git
$ cd MSYS2-packages/vim
$ vim PKGBUILD

# Maintainer: Alexey Pavlov <alexpux@gmail.com>

pkgname=vim
_topver=8.0
-_patchlevel=0606+_patchlevel=0858
_versiondir="${pkgname}${_topver//./}"
pkgver=${_topver}.${_patchlevel}
pkgrel=1
arch=('i686' 'x86_64')
license=('custom:vim')
url="http://www.vim.org"
depends=('ncurses')
groups=('editors')
makedepends=('gawk' 'perl' 'python2' 'python3' 'ruby' 'libiconv' 'ncurses-devel' 'libcrypt-devel')
source=(${pkgname}-${pkgver}.tar.gz::https://github.com/vim/vim/archive/v${pkgver}.tar.gz
        'dot.vimrc'
        '7.3-cygwin-mouse.patch'
        '7.3-virc.patch'
        '7.3-cygwin-python-dyn.patch'
        'pretend-cygwin-msys.patch'
        'accept-crlf.patch'
        'vim-completion')
-sha256sums=('fe8dc50c735f625073cbe06b6dda863e623117ce41b66f40ce5f7efd77a1109e'+sha256sums=('0a585eaa477ecb9f4723ce2709c9e2457a37672ba65f7c174c4deb26b1c5c5fc'
            'edd18e0756406ee7b659e4552e444c50c3a0c1e9fb4fce2ddd770c933ea6c7f5'
            'bca6e030d50c0d2468ab5c78aa0b359eb18a88a197de8406c593458ffedde922'
            '44d7738a8f801195898eeef766ff77506c717dd5d19145ade3c1c2349d4bc4fd'
            '0698234a2436f2d37f43775c9db5a2fc67d182f8baa46a8a0e2b7dd37da6fcbd'
            '5fcec194d2fcb2a624358d8ce074e8d97b873b5c2fff2118491b57a4880737d9'
            'bfa0b1f29e83eadd161c570f28a1247e3dca6aa3d89d23abcb7e57dab7649a6d'
            'bdca6069ef0fa995718f4b59fea85e58629259bb5a385d53e52d162d1463d4ff')

prepare() {
  cd ${srcdir}/${pkgname}-${pkgver}

  iconv -f ISO-8859-1 -t UTF-8 runtime/doc/eval.txt \
    > runtime/doc/eval.tmp && mv -f runtime/doc/eval.{tmp,txt}

  patch -p2 -i ${srcdir}/7.3-cygwin-mouse.patch
  patch -p2 -i ${srcdir}/7.3-virc.patch
  patch -p2 -i ${srcdir}/7.3-cygwin-python-dyn.patch
  patch -p1 -i ${srcdir}/pretend-cygwin-msys.patch
  patch -p1 -i ${srcdir}/accept-crlf.patch

  # define the place for the global (g)vimrc file (set to /etc/vimrc)
  #sed -i 's|^.*\(#define SYS_.*VIMRC_FILE.*"\) .*$|\1|' \
  #  vim-build/src/feature.h
  #sed -i 's|^.*\(#define VIMRC_FILE.*"\) .*$|\1|' \
  #  vim-build/src/feature.h

  cd src
  autoconf
}

build() {
  cd ${srcdir}/${pkgname}-${pkgver}

  # ./configure \
    # --prefix=/usr \
    # --build=${CHOST} \
    # --with-features=small \
    # --with-tlib=ncursesw \
    # --enable-multibyte \
    # --disable-luainterp \
    # --disable-perlinterp \
    # --disable-pythoninterp \
    # --disable-python3interp \
    # --disable-rubyinterp \
    # --disable-tclinterp \
    # --disable-gpm --disable-sysmouse \
    # --disable-gui --without-x \
    # --with-compiledby="<alexpux@gmail.com>"
  # make auto/osdef.h
  # make VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/vim${slot/\.} || die "make 2 fail"
  # mv vim.exe vi.exe
  # make distclean

  ./configure \
+   --with-features=huge \+   --enable-terminal \
    --prefix=/usr \
    --build=${CHOST} \
    --with-features=huge \
    --with-tlib=ncursesw \
    --enable-cscope \
    --enable-multibyte \
-   --enable-luainterp=dynamic \+   --enable-luainterp \+   --with-lua-prefix=/usr/local \+   --enable-fail-if-missing \
    --enable-perlinterp=dynamic \
    --enable-pythoninterp=dynamic \
    --enable-python3interp=dynamic \
    --enable-rubyinterp=dynamic \
    --disable-tclinterp \
    --disable-gpm --disable-sysmouse \
    --disable-gui --without-x \
    CPPFLAGS="${CPPFLAGS} -I/usr/include/ncursesw" \
    --with-compiledby="<alexpux@gmail.com>"

  #make auto/osdef.h
  make -j1 VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/vim${_topver/\.}
}

check() {
  # disable tests because they seem to freeze

  cd "${srcdir}"/${pkgname}-${pkgver}

  #make test
}

package() {
  cd "${srcdir}"/${pkgname}-${pkgver}
  make -j1 VIMRCLOC=/etc DESTDIR="${pkgdir}" install

  make install -j1 \
    VIMRCLOC=/etc VIMRUNTIMEDIR=/usr/share/vim/vim${_topver/\.} \
    STRIP=: INSTALL_DATA="cp -L" INSTALL_DATA_R="cp -Lr" \
    DESTDIR="${pkgdir}"

  #for x in ex rvi vi.exe
  #do
  #  cp -f vi.exe ${pkgdir}/usr/bin/${x}
  #done

  for y in vimdiff view rview rvim
  do
    cp -f ${pkgdir}/usr/bin/vim.exe ${pkgdir}/usr/bin/${y}
  done

  mkdir -p ${pkgdir}/usr/share/bash-completion/completions
  cp -f ${srcdir}/vim-completion ${pkgdir}/usr/share/bash-completion/completions/vim

  # delete some manpages
  find "${pkgdir}"/usr/share/man -type d -name 'man1' 2>/dev/null | \
    while read _mandir; do
    cd ${_mandir}
    rm -f ex.1 # provided by (n)vi
    rm -f evim.1    # this does not make sense if we have no GUI
  done

  # fix FS#17216
  sed -i 's|messages,/var|messages,/var/log/messages.log,/var|' \
    "${pkgdir}"/usr/share/vim/${_versiondir}/filetype.vim

  # patch filetype.vim for better handling of pacman related files
  sed -i "s/rpmsave/pacsave/;s/rpmnew/pacnew/;s/,\*\.ebuild/\0,PKGBUILD*,*.install/" \
    "${pkgdir}"/usr/share/vim/${_versiondir}/filetype.vim
  sed -i "/find the end/,+3{s/changelog_date_entry_search/changelog_date_end_entry_search/}" \
    "${pkgdir}"/usr/share/vim/${_versiondir}/ftplugin/changelog.vim

  # rc files
  install -Dm644 "${srcdir}"/dot.vimrc "${pkgdir}"/etc/skel/.vimrc

  # rgb.txt file
  install -Dm644 "${srcdir}"/vim-${pkgver}/runtime/rgb.txt \
    "${pkgdir}"/usr/share/vim/${_versiondir}/rgb.txt

  # license
  install -Dm644 "${srcdir}"/vim-${pkgver}/runtime/doc/uganda.txt \
    "${pkgdir}"/usr/share/licenses/${pkgname}/license.txt
}

pacman用のパッケージを作成

$ makepkg
$ pacman -U vim-8.0.0858-1-x86_64.pkg.tar.xz

できたー

ScreenShot.png

留意点

ConEmuとの相性がすこぶる悪くて打った文字が見えません:sleepy:
ただ、バージョンが進むときっと解決されるでしょう(他力本願

謝辞

Vimの:terminalを試したいのでソースからbuildした(windows)

$
0
0

:terminal

何かと話題のvimの:terminal。
ここ一月くらいでvimのmasterへどんどんpushされていっています。

きっと今vimの:terminalに特に興味があるのは、
windows環境でvimを使っている人ではないでしょうか。

私も職場がwindows環境で、日頃はKaoriyaさんのバイナリにお世話になっています。
というわけで、執筆時点で最新のリポジトリからbuildして:terminalを使ってみました。

きっと、:terminalをいち早く試してみたいという方は沢山おられると思いますので、
簡単に手順をまとめておきました。

environment

  • windows10 64bit
  • msys2 20161025
  • vim 8.0.0862

step

まず、今回実施した手順は以下の通り。

  1. msys2のインストール
  2. MinGwのインストール
  3. vimのソースコードのcloneとterminalオプションのenable
  4. build
  5. packageの作成

1. msys2のインストール

これはofficialからインストーラが公開されているので、インストーラからインストールして下さい。

msys2 official

特に今回注意した点はありません。
インストール後にpacman -Suを実施して必要なpackageをインストールしておけばOK。
インストール後に立ち上がるプロセスでは警告が出たりしますが、もう一度起動してやればできます。

2. MinGWのインストール

次にmsys2のシェルからMingGWをインストールします。

pacman -S mingw-w64-x86_64-toolchain
※ 32bit環境の場合はx86_64i686にします。

どれをインストールするかを聞かれますが、確認が面倒なので私はdefault:Allのまま全てインストールしました。

3. vimのソースコードのcloneとterminalオプションのenable

ソースの用意

buildに向けてソースコードの用意をします。
githubのvim/vimからgit cloneするか、
ダウンロードするなりしてローカルにリポジトリの内容一式を持ってきます。

terminalオプションのenable

そのままbuildしてもterminalオプションがdisableでbuildされてしまうので、
まずはmakefileの以下のように書き換えて下さい(実行時オプションでTERMINAL=yesでも構わないかもしれませんが)。

Make_cyg_ming.mak
CHANNEL=$(GUI)
endif
# Set to yes to enable terminal support.
-TERMINAL=no+TERMINAL=yes


# Link against the shared version of libstdc++ by default.  Set

他にもユーザの要求に従った様々なoptionがありますが、とりあえず:terminalを試す分にはこれで十分だと思います。

4. build

それではいよいよ用意したソースコードをbuildします。
buildはvim/srcディレクトリで行って下さい。

$ cd path/to/vim/src

$mingw32-make -f Make_ming.mak GUI=yes ARCH=x86-64 clean
$mingw32-make -f Make_ming.mak GUI=yes ARCH=x86-64

※ これも32bit環境の場合はx86-64i686にします。
※ CUI版も必要な場合は別途GUI=noにてbuildします。

これでエラーなくbuildされると、カレントにgvim.exe(vim.exe)が作成されます。
あとは次のstepで必要なファイルとpackagingすれば使えるようになります。

5. packageの作成

最後に、依存ライブラリや必要なファイルと一緒にpackageにします。
結果的に以下のような構成となりました。
iconv関連の依存ライブラリは:terminalとは直接関係ありません。

2017/08/05  17:17    <DIR>          .
2017/08/05  17:17    <DIR>          ..
2017/08/05  13:57         3,151,872 gvim.exe # buildしてできた実行体
2017/08/05  15:46                44 gvimrc   # gui向けの設定ファイル
2017/03/06  14:30         1,056,753 libiconv-2.dll      # 以下3ファイルはmsys2のbinから(iconvオプション向け)
2017/02/21  17:26           133,779 libintl-8.dll       
2017/07/13  16:35            57,379 libwinpthread-1.dll 
2017/08/05  13:45    <DIR>          vim80 # ここへはvim/runtimeの内容を全てコピーする
2017/08/05  15:46               101 vimrc # gui/gui共通の設定ファイル        
2017/06/01  11:08           901,632 winpty-agent.exe  # 以下4ファイルはGit/usr/binから     
2017/06/01  11:08           791,040 winpty-debugserver.exe
2017/06/01  11:08           830,976 winpty.dll
2017/06/01  11:08           749,056 winpty.exe

それぞれコメントに従って必要なファイルを持ってきてもらえればよいです。
winpty関連のファイルは不要なものもあるかもしれません。dllとexeは必須でした。
そもそもGitから持ってきたけどそれで良かったかも不明。(知識不足)

vimが端末になったぞ!!

というわけで:terminalが使えるようになりました。
実用はKaoriya-vimへの依存が強い今はまだ無理かなーという感じですが、
早くいろんなシチュエーションで使ってみたいですね!!

20170805_vim_term.png

reference

vimのbuildについて以下のページを参考にさせて頂きました。

IdeaVIMのキーバインドを考える

$
0
0

IDEA系エディタでVimのキーバインドを使うために、 IdeaVIMというプラグインがある。
流石にVim純正プラグインがそのまま動くわけではないので、足りない機能はIDEA純正の機能にVimプラグイン風のキーを割り当てて補うことを考える。

以下はGitHubから他人の .ideavimrcを見漁って自分なりにまとめた .ideavimrcの設定である。

コード折り畳みを無効化

自分にとってIDEのコード折り畳み機能は不要な機能であるが、IDEの設定から無効化するだけでは不完全であった。

.ideavimrc
nnoremap zM <Nop>nnoremap zc <Nop>nnoremap zC <Nop>nnoremap zR <Nop>nnoremap zo <Nop>nnoremap zO <Nop>

surround を有効化

tpope/vim-surroundと同じ機能とキーバインドを実現。

.ideavimrc
set surround

AceJump にキーバインドを割り当てる

AceJumpvim-easymotionと似た挙動をするIDEA用のプラグイン。
私の場合は Space 2回押下で呼び出すように設定する。

.ideavimrc
nnoremap<Space><Space> :<C-u>action AceAction<CR>

Vimモードでは少し挙動がおかしいのであまり使っていない。

検索機能をIDEA純正に

テキストハイライトがついて見やすく、凝った検索をしなければVim純正と似たような操作性で検索ができる。

.ideavimrc
nnoremap / :<C-u>action Find<CR>

ジャンプ機能をIDEA純正に

コードジャンプ機能はIDEAの方が完成度が高いので、こちらを標準で使います。

.ideavimrc
nnoremap<C-o> :<C-u>action Back<CR>nnoremap<C-i> :<C-u>action Forward<CR>nnoremap<C-S-o><C-o>nnoremap<C-S-i><C-i>

コードジャンプ

カーソル化の変数の出現

.ideavimrc
nnoremap [o :<C-u>action PreviousOccurence<CR>nnoremap ]o :<C-u>action NextOccurence<CR>

前/次のメソッド定義へジャンプ

.ideavimrc
nnoremap [m :<C-u>action MethodUp<CR>nnoremap ]m :<C-u>action MethodDown<CR>

前/次の変更箇所へジャンプ

.ideavimrc
nnoremap [c :<C-u>action VcsShowPrevChangeMarker<CR>nnoremap ]c :<C-u>action VcsShowNextChangeMarker<CR>

前/次のエラー箇所へジャンプ

.ideavimrc
nnoremap [e :<C-u>action GotoPreviousError<CR>nnoremap ]e :<C-u>action GotoNextError<CR>

[ + アルファベットで前方検索、] + アルファベットで後方検索。ついでに現在の行の前/後に空行を挿入するキーバインドも紹介する。

.ideavimrc
nnoremap [<Space> O<Esc>jnnoremap ]<Space>o<Esc>k

タグジャンプ

キーセット動作
KJavaDocを表示
gjKインターフェイスへジャンプ
gjk宣言へジャンプ
gji実装クラスへジャンプ
gjsスーパークラスへジャンプ
gjtテストクラスへジャンプ
Ctrl + k出現箇所の検索

基本的に gj + アルファベットをタグジャンプに割り当てている。

.ideavimrc
nnoremap K :<C-u>action QuickJavaDoc<CR>nnoremap gjK :<C-u>action GotoDeclaration<CR>nnoremap gjk :<C-u>action GotoTypeDeclaration<CR>nnoremap gji :<C-u>action GotoImplementation<CR>nnoremap gjs :<C-u>action GotoSuperMethod<CR>nnoremap gjt :<C-u>action GotoTest<CR>nnoremap<C-k> :<C-u>action ShowUsages<CR>

コードリファクタリング機能

あまりしっくりくるキーバインドが浮かばなかったのでパクったものをそのまま使ってる。

.ideavimrc
nnoremapcre :<C-u>action RenameElement<CR>nnoremap cS :<C-u>action ChangeSignature<CR>nnoremap cts :<C-u>action ChangeTypeSignature<CR>

IDEのリッチな機能にキーバインドを割り当てる

キーバインドを覚えるコストを少しでも削減するために、以下のルールを設けてみた。

  • スペースキー + 小文字アルファベットでIDEの機能で何かする。
  • スペースキー + 大文字アルファベットでIDEの機能で何か大げさなことをする。

ものすごく漠然としているが、例を見て頂ければ理解できると思う。

キーセット動作
Space + aIDEアクションを検索
Space + Gコード生成メニューを表示
Space + gn新規クラスを生成
Space + goメソッドをオーバーライド
Space + gcコンストラクタを生成
Space + ggGetter を生成
Space + gsSetter を生成
Space + gaGetter/Setter を生成
Space + geequals を生成
Space + gtテストメソッドを生成
Space + =現在のバッファをフォーマット
Space + oアウトラインを表示
Space + q現在のバッファを閉じる
Space + Q最後の閉じたバッファを開く
Space + fファイルを検索
Space + Fファイルを全文検索
Space + sクラスを検索
Space + Sシンボルを検索
Space + t端末を表示
Space + r実行
Space + R現在のクラスを実行
Space + dデバッグ
Space + D現在のクラスをデバッグ
Space + b現在の行をブレークポイントに指定/指定解除

以上を反映したものがこちらである。

.ideavimrc
nnoremap<Space>a :<C-u>action GotoAction<CR>nnoremap<Space>G :<C-u>action Generate<CR>nnoremap<Space>gn :<C-u>action NewClass<CR>nnoremap<Space>go :<C-u>action OverrideMethods<CR>nnoremap<Space>gc :<C-u>action GenerateConstructor<CR>nnoremap<Space>gg :<C-u>action GenerateGetter<CR>nnoremap<Space>gs :<C-u>action GenerateSetter<CR>nnoremap<Space>ga :<C-u>action GenerateGetterAndSetter<CR>nnoremap<Space>ge :<C-u>action GenerateEquals<CR>nnoremap<Space>gt :<C-u>action GenerateTestMethod<CR>nnoremap<Space>= :<C-u>action ReformatCode<CR>nnoremap<Space>o :<C-u>action FileStructurePopup<CR>nnoremap<Space>q :<C-u>action CloseContent<CR>nnoremap<Space>Q :<C-u>action ReopenClosedTab<CR>nnoremap<Space>e :<C-u>action SearchEverywhere<CR>nnoremap<Space>f :<C-u>action GotoFile<CR>nnoremap<Space>F :<C-u>action FindInPath<CR>nnoremap<Space>s :<C-u>action GotoClass<CR>nnoremap<Space>S :<C-u>action GotoSymbol<CR>nnoremap<Space>t :<C-u>action ActivateTerminalToolWindow<CR>nnoremap<Space>P :<C-u>action ManageRecentProjects<CR>nnoremap<Space>b :<C-u>action ToggleLineBreakpoint<CR>

バッファがない状態、あるいはコードエリアからフォーカスが外れてしまうとキーバインドが使えなくなるのが残念。

IDEのアクションを呼び出す

:actionlist [フィルタ]

でIdeaVIMから呼び出せる機能を参照できる。

:action [アクション名]

でアクションの呼び出しが行えるので、どのような挙動をするのかを試すことが出来る。

これからやる

  • 何も含んでいない最終行にキャレットが移動しないバグがあるので、修正したものを近々PRを送る。
  • SelectWord , UnSelectWordは actionlist に含まれていたが、Vimの範囲選択とは連携できないので修正する。
  • RenameElementが不自然なので、Vimのモード、範囲選択と自然に連携するように修正する

RStudioでVimモード使用中にキーよる移動が繰り返されない時に(MacBook)

$
0
0

マックブックでRStudioを使う場合、Vimモードの時に h, j, k, l キーを押しっぱなしにしても、キーが繰り返されずに一歩しか動かな場合がある。

これはアップルの設定によるものらしく、挙動を変更するには、端末から下記を実行すればよいとのこと。

defaults delete -g ApplePressAndHoldEnabled
defaults write -app RStudio ApplePressAndHoldEnabled -bool false

なんでも調べてみるものだ。

参考:RStudio Support

Viewing all 5744 articles
Browse latest View live


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