Posted at

ディレクトリのかわりにその名前で始まるファイルを開くVim script

More than 5 years have passed since last update.

Vimでディレクトリを開こうとした時に、

開こうとした名前で始まるファイルがある場合は、

ディレクトリのかわりにそのファイルを開くスクリプトです。



  1. set wildmode=longest:fullと設定していて、

  2. 'tcvime/'と'tcvime.vim'がある状況で、

  3. 'tcvime.vim'を開こうとして、:e tc<Tab>と入力(補完)


  4. :e tcvimeまで補完される

  5. ついそのままリターンキーを押すと'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