Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在vim的新目录中一步创建文件?_Vim - Fatal编程技术网

在vim的新目录中一步创建文件?

在vim的新目录中一步创建文件?,vim,Vim,在vim中,我想在[working directory]/spec/models/中创建一个名为blog_spec.rb的新文件,但该目录还不存在 创建目录并开始编辑文件的最快方法是什么?有OneLiner吗?如果您经常遇到这种情况,可能值得为其添加一个命令 :!mkdir -p spec/models :w spec/models/blog_spec.rb command -nargs=1 E execute('silent! !mkdir -p "$(dirname "<args&g

在vim中,我想在
[working directory]/spec/models/
中创建一个名为
blog_spec.rb
的新文件,但该目录还不存在


创建目录并开始编辑文件的最快方法是什么?有OneLiner吗?

如果您经常遇到这种情况,可能值得为其添加一个命令

:!mkdir -p spec/models
:w spec/models/blog_spec.rb
command -nargs=1 E execute('silent! !mkdir -p "$(dirname "<args>")"') <Bar> e <args>

编辑此命令仅适用于Linux/Mac,而不适用于Windows。

请尝试以下命令:

function s:MKDir(...)
    if         !a:0 
           \|| stridx('`+', a:1[0])!=-1
           \|| a:1=~#'\v\\@<![ *?[%#]'
           \|| isdirectory(a:1)
           \|| filereadable(a:1)
           \|| isdirectory(fnamemodify(a:1, ':p:h'))
        return
    endif
    return mkdir(fnamemodify(a:1, ':p:h'), 'p')
endfunction
command -bang -bar -nargs=? -complete=file E :call s:MKDir(<f-args>) | e<bang> <args>
-complete=file
会破坏一些东西:它不仅添加了补全,还添加了参数处理(因此检查
`
扩展和特殊字符的存在是没有意义的),并且禁止有多个“文件名”(因此没有++选项)

-bar
使您无法使用
`=“String”`
,因为
现在开始一条注释。没有
-bar
它就不是
:e
仿真,因为您无法执行
e文件|另一个命令

另一个版本:

function s:MKDir(...)
    if         !a:0 
           \|| isdirectory(a:1)
           \|| filereadable(a:1)
           \|| isdirectory(fnamemodify(a:1, ':p:h'))
        return
    endif
    return mkdir(fnamemodify(a:1, ':p:h'), 'p')
endfunction
command -bang -bar -nargs=? -complete=file E :call s:MKDir(<f-args>) | e<bang> <args>
函数s:MKDir(…) 如果!a:0 \||isdirectory(a:1) \||文件可读(a:1) \||isdirectory(fnamemodify(a:1':p:h')) 返回 恩迪夫 返回mkdir(fnamemodify(a:1':p:h'),'p') 端功能 command-bang-bar-nargs=?-complete=file E:calls s:MKDir()| E
我通常在尝试保存文件后才发现父目录并不存在

将提示您使用
:w
创建目录,或者仅使用
:w!

augroup vimrc-auto-mkdir
  autocmd!
  autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
  function! s:auto_mkdir(dir, force)
    if !isdirectory(a:dir)
          \   && (a:force
          \       || input("'" . a:dir . "' does not exist. Create? [y/N]") =~? '^y\%[es]$')
      call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
    endif
  endfunction
augroup END
augroup vimrc auto mkdir
自动驾驶!
autocmd BufWritePre*调用s:auto_mkdir(展开(':p:h'),v:cmdbang)
函数!s:auto_mkdir(dir,force)
if!isdirectory(a:dir)
\&&(a:武力
\| |输入(“.”.a:dir.“.”不存在。创建?[y/N]”=~?“^y\%[es]$”)
调用mkdir(iconv(a:dir,&encoding,&termcoding),'p')
恩迪夫
端功能
螺旋端

在我看来,这比公认的答案要好。这对我来说非常有效。非常感谢!一件事是这个答案没有路径的制表符完成。在上面的例子中,如果
spec
模型存在,但是
模型没有,你就必须键入
spec
,而不是
sp
这里有一个合适的插件。这正是我所寻找的!通常,在编辑文件之前,我不想考虑路径是否存在。我只在准备保存文件时担心它。@DavidBernal将其包装在函数中。问题的关键是,问题是显式的“一步完成”,所以这不是答案。
function s:MKDir(...)
    if         !a:0 
           \|| isdirectory(a:1)
           \|| filereadable(a:1)
           \|| isdirectory(fnamemodify(a:1, ':p:h'))
        return
    endif
    return mkdir(fnamemodify(a:1, ':p:h'), 'p')
endfunction
command -bang -bar -nargs=? -complete=file E :call s:MKDir(<f-args>) | e<bang> <args>
augroup vimrc-auto-mkdir
  autocmd!
  autocmd BufWritePre * call s:auto_mkdir(expand('<afile>:p:h'), v:cmdbang)
  function! s:auto_mkdir(dir, force)
    if !isdirectory(a:dir)
          \   && (a:force
          \       || input("'" . a:dir . "' does not exist. Create? [y/N]") =~? '^y\%[es]$')
      call mkdir(iconv(a:dir, &encoding, &termencoding), 'p')
    endif
  endfunction
augroup END