分页: 1 / 1

vi如何以当前文件作为工作目录

发表于 : 2009-08-31 18:05
JiangMiao
如当前文件为 /home/miao/Desktop/foo.txt
工作目录pwd为 /home/miao
如何设定命令运行 cd /home/miao/Desktop更改工作目录?

谢谢

Re: vi如何以当前文件作为工作目录

发表于 : 2009-08-31 21:37
JiangMiao
set autochdir 就可自动把当前文件作为工作路径
单条命令则为 :cd %:p:h

Re: vi如何以当前文件作为工作目录

发表于 : 2009-08-31 21:40
JiangMiao
延伸问题: 在进了Buf后,如果有NERDTree则NERDTree的位置自动定为该文件,又该如何设置 :em23

Re: vi如何以当前文件作为工作目录

发表于 : 2009-08-31 22:10
sarrow
延伸问题: 在进了Buf后,如果有NERDTree则NERDTree的位置自动定为该文件,又该如何设置

最简单的办法:查找名字为NERDTree的窗口,如果不存在,则什么也不做;

否则,进入该窗口,然后
:normal q
:NERDTree %:p:h
:call search(expand("%:t"))

Re: vi如何以当前文件作为工作目录

发表于 : 2009-08-31 23:34
JiangMiao
NERDTree不太好搞,而且发现每调用一次NERDTree,NERDTree的缓冲计数加1,
用回了Netrw,照sarrow的提示,写了如下代码,按F3自动跳到该文件所在目录并指向该文件,按2<C-o>返回 :em11

代码: 全选

function Jump_to_current_file()
  let filename=expand('%:t')
  exec 'e %:p:h'
  call cursor(8,1)
  call search(filename)
endfunction
nmap <F3> :call Jump_to_current_file()<cr>

Re: vi如何以当前文件作为工作目录

发表于 : 2009-09-01 18:28
JiangMiao
重写了下代码,
调用命令时
1、如果缓冲区已编辑且仅有一个缓冲区,水平分割一个窗口打开文件浏览器
2、如果该缓冲区是由该脚本打开的,那它怎么来就怎么回去-关闭或返回。

哪里可以改进或者缩写的还请多多指教。 :em03

代码: 全选

"由buffer expr得到window数
function GetWindowCount(expr)
  let cur_buf_id=bufnr(a:expr)
  let cur_buf_cnt=0
  let i=1
  while 1
    let buf_id=winbufnr(i) 
    if buf_id==cur_buf_id
      let cur_buf_cnt=cur_buf_cnt+1
    endif
    if buf_id==-1
      break
    end
    let i=i+1
  endwhile
  return cur_buf_cnt
endfunction

"跳转或关闭窗口
function JumpToCurrentFile()
  "跳回或关闭
  if exists('b:jm_is_jumped')
    if exists('b:jm_is_splitted')
      exec 'close'
    else
      exec 'buffer #'
    endif
    return
  endif

  "跳转
  let filename=expand('%:t')
  if &modified && GetWindowCount('%')<2
    exec 'split'
    let l:jm_is_splitted=1
  end
  exec 'e %:p:h'
  let b:jm_is_jumped=1
  if exists('l:jm_is_splitted')
    let b:jm_is_splitted=1
  endif
  call cursor(8,1)
  call search(filename)
endfunction
nmap <F3> :call JumpToCurrentFile()<cr>