Vimでディレクトリを開こうとした時に、
開こうとした名前で始まるファイルがある場合は、
ディレクトリのかわりにそのファイルを開くスクリプトです。
-
set wildmode=longest:full
と設定していて、 - 'tcvime/'と'tcvime.vim'がある状況で、
- 'tcvime.vim'を開こうとして、
:e tc<Tab>
と入力(補完) -
:e tcvime
まで補完される - ついそのままリターンキーを押すと'tcvime/'がnetrwで開かれる。
開きたい'tcvime.vim'が開けなくていらついたので、スクリプトを作りました。
個人的にはディレクトリを開きたい状況はほとんど無いですし。
なお、このスクリプトを入れると、上記状況に当てはまる場合に
ディレクトリがnetrwで開かれなくなりますが、netrwで開きたい場合は、
:Explore directory
以下スクリプト。
netrwの一部autocmdを上書きする必要があるので、~/.vim/after/pluginに置いています。
~/.vim/after/plugin/closediropenfile.vim
augroup CloseDirOpenFile
au!
autocmd BufEnter * call s:CloseDirOpenFile(expand("<amatch>"))
augroup END
" netrwのLocalBrowserではなくCloseDirOpenFileが動くように、削除
if exists('#FileExplorer')
autocmd! FileExplorer BufEnter *
endif
function s:CloseDirOpenFile(name)
if !isdirectory(a:name)
return
endif
let files = glob(a:name . '*', 1, 1)
call filter(files, '!isdirectory(v:val)')
if len(files) < 1
sil! call netrw#LocalBrowseCheck(a:name)
return
endif
"let nr = bufnr('')
let nr = expand('<abuf>')
execute 'e' files[0]
" :eより先にbwipeoutすると:sp時に期待通りに動かないので
execute nr . 'bwipeout!'
" (BufAddにして:bw無しにするとnetrwのせいで(?)[RO]になる)
endfunction