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

Vim、Emacs配置和使用
回复
JiangMiao
帖子: 30
注册时间: 2009-07-15 13:03

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

#1

帖子 JiangMiao » 2009-08-31 18:05

如当前文件为 /home/miao/Desktop/foo.txt
工作目录pwd为 /home/miao
如何设定命令运行 cd /home/miao/Desktop更改工作目录?

谢谢
Ubuntu 9.04 中, 我的BLOG
JiangMiao
帖子: 30
注册时间: 2009-07-15 13:03

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

#2

帖子 JiangMiao » 2009-08-31 21:37

set autochdir 就可自动把当前文件作为工作路径
单条命令则为 :cd %:p:h
Ubuntu 9.04 中, 我的BLOG
JiangMiao
帖子: 30
注册时间: 2009-07-15 13:03

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

#3

帖子 JiangMiao » 2009-08-31 21:40

延伸问题: 在进了Buf后,如果有NERDTree则NERDTree的位置自动定为该文件,又该如何设置 :em23
Ubuntu 9.04 中, 我的BLOG
sarrow
帖子: 403
注册时间: 2007-10-27 1:04

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

#4

帖子 sarrow » 2009-08-31 22:10

延伸问题: 在进了Buf后,如果有NERDTree则NERDTree的位置自动定为该文件,又该如何设置

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

否则,进入该窗口,然后
:normal q
:NERDTree %:p:h
:call search(expand("%:t"))
JiangMiao
帖子: 30
注册时间: 2009-07-15 13:03

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

#5

帖子 JiangMiao » 2009-08-31 23:34

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>
Ubuntu 9.04 中, 我的BLOG
JiangMiao
帖子: 30
注册时间: 2009-07-15 13:03

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

#6

帖子 JiangMiao » 2009-09-01 18:28

重写了下代码,
调用命令时
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>
Ubuntu 9.04 中, 我的BLOG
回复