我对VIM有点新鲜,并且正在玩打开文件的方法(OS X)。
暂时退出到shell后返回VIM(ctrl + z,然后是fg),我认为如果VIM将当前的工作目录设置为我返回时的任何地方都会很方便。
这可能吗?我知道如何从VIM中手动更改工作目录。
谢谢,
答案 0 :(得分:2)
检查您的Vim版本是否支持客户端 - 服务器功能::echo has('clientserver')
如果是这样,你可以写一个别名告诉Vim改变它的cwd:
在.bashrc中:
alias fg="$VIM --remote-send ':cd $PWD<CR>'; fg"
$ VIM为vim
或gvim
或macvim
。
你需要冒号和<CR>
,因为你发送Vim键击而不是命令(<CR>
是“回车”的特殊符号)
当Vim被挂起时,我不确定--remote-send
是否有效 - 如果你使用像screen或tmux这样的东西同时运行vim和你的shell,这种方法可能会更好。
否则,它有点棘手。
有一个:shell命令,类似于挂起和恢复,但我假设它分叉子进程,而不是让你返回到Vim的父进程。如果您对此感到满意,可以附加一个ShellCmdPost autocmd来加载信息。您可以将其与将$ CWD写入文件的别名相关联,以加载所需的目录并更改为该目录。
在.bashrc中:
alias fgv="echo $PWD > ~/.cwd; exit"
在.vimrc中:
autocmd ShellCmdPost * call LoadCWD()
function! LoadCWD()
let lines = readfile('~/.cwd')
if len(lines) > 0
let cwd = lines[0]
execute 'cd' cwd
endif
endfunction
查看自动命令列表,当Vim被暂停并刚刚恢复时,我无法找到任何检测到的内容。您可以重新映射ctrl-z以首先设置标志变量然后执行未映射的ctrl-z。然后像以前一样编写一个shell脚本,将其$ CWD写入特定文件。然后,您可以设置autocmd来监视该文件以进行修改,并在处理程序中检查标志变量,如果已设置,则重置它,读取文件并切换到该目录。有点复杂,但它会起作用。
看起来像这样。您必须在启动Vim时加载该文件,以便它可以监视它以进行更改。您可能需要set hidden
,以便可以保持缓冲区打开但隐藏它。
在.bashrc中:
alias fg="echo $PWD > ~/.cwd; fg"
在.vimrc中:
set hidden
edit ~/.cwd
enew
nnoremap <C-Z> :let g:load_cwd = 1<CR><C-Z>
autocmd FileChangedShell ~/.cwd call LoadCWD()
function! LoadCWD()
if g:load_cwd
let g:load_cwd = 0
let lines = readfile('~/.cwd')
if len(lines) > 0
let cwd = lines[0]
execute 'cd' cwd
endif
endif
endfunction