LoginSignup
3
3

More than 5 years have passed since last update.

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

Posted at

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
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3