![](/img/trans.png)
[英]linux command-line update csv file inline using value from another column that is json
[英]How to open another file in background Vim from Bash command-line?
我正在从使用 Gvim 过渡到控制台 Vim。
我在Vim打开一个文件,然后挂起Vim,在命令行运行几个命令然后想回到Vim。
Ctrl+Z
(普通模式下)挂起 Vim 回落到控制台fg
可用于将焦点返回到 Vimjobs
列出后台作业,可用于获取作业编号以将给定作业带到前台(例如, fg %2
将作业 2 带到前台)。 但是,当 Vim 在后台并且我发出vim file
时,该文件将在 Vim 的新实例中打开。
我习惯于使用 Gvim 的--remote
选项来打开现有 Gvim 实例中的文件。
我刚刚阅读了@jamessan 的回答,其中提供了一些想法。 他展示了以下代码片段:
vim --servername foo somefile.txt
:shell
<do stuff in your shell>
vim --servername foo --remote otherfile.txt
fg
但是,我必须考虑如何使用某些别名使其更易于使用。
这也是我需要的。 我发现这个帖子虽然没有令人满意的方法,但很高兴看到人们和我一样有同样的要求。
我的方法是
v() {
vim_id=`jobs|sed -n "/vim/s/\[\([0-9]\)\]+.*/\1/p"`
if [ -n "$vim_id" ]; then
echo "tabedit $@" > ~/.vim_swap/e.vim && fg $vim_id
else
vim $@
fi
}
nnoremap <silent> <space>e :source $HOME/.vim_swap/e.vim<Bar>:call writefile([], $HOME."/.vim_swap/e.vim")<CR>
然后v foo.c
打开第一个文件,编辑...,ctrl-z暂停vim,做shell东西, v bar.h
带vim前台。
在VIM中,按<Space>e
到tabedit bar.h.
所以我们的想法是从shell命令生成vim命令,将它们保存到temp .vim文件中。 在VIM中,映射键以获取.vim文件并清除它。
您需要将当前的vim进程置于前台(使用fg)并在vim中打开文件,而不是再次运行vim。
我没有太多使用它,但您可能会发现“vim服务器”功能(请参阅--remote *, - servername等选项)允许您将shell中的文件打开到现有的后台vim中。 但是,ctrl-z 暂停进程而不是允许它继续在后台运行,并且您需要将该vim放入后台,以便它可以作为“vim服务器”进行响应。 使用shell的bg命令来做到这一点。
我只是从fg
调用vim并在vim中打开新文件,因为它似乎更快(虽然它可能对我来说更快)。 要在vim中使用多个文件,你需要使用命令编辑(在vim中):: :e [filepath/]filename
和你走^I
true(所有文件将作为vim缓冲区)与^I
(ctrl + I)和^O
(CTRL + O)
它适用于GTK和shell版本。 工作流程没有这么大的差异。 我喜欢shell版本,因为我在那里执行大部分命令(编译启动等)。
如果你使用tmux
,并且你总是让你的 vim 实例作为第一个作业在后台运行,你可以在 csh 中像下面这样设置别名。
alias v 'tmux send-keys fg Space +1 Enter :e Space `realpath \!:1` Enter'
那么你可以这样称呼它
v myfile.txt
如果您的 vim 实例不是第一个后台作业,请使用jobs
output 丰富别名。
在 Bash 中,这可以通过 function 来完成。
function v() {
local job=$(jobs | perl -ne 'print $1 if /\[(\d+)\].*vim/')
if [[ -n $job ]]; then
tmux send-keys fg Space $job Enter
for f in $*; do
tmux send-keys :e Space `realpath $f` Enter
done
else
vim $*
fi
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.