我一直是一个控制台vim用户,但最近我尝试使用gvim。 我做了一些设置,以至于我的控制台习惯不会受到影响,例如 使用。打开当前目录下的urxvt终端。
但是我的上网本打开了多个gvims和终端 太可怕了,迅速将我的vim空间缩小到一厘米或者两厘米。最好, 窗口宽度减半,无法垂直分割 屏幕(平铺wm)。
我通过将vim别名化为gvim --remote-silent
来解决这个问题
工作好几天,但今天我需要使用-c''和
意识到有任何开关--remote-silent打开那些
切换为文件。所以做gvim --remote-silent --foo bar
会打开两个
文件, - foo和bar。
我为alias vim=gvim
添加了一个新别名,但我担心这会让我变成一个
再次使用console vim用户,比我想象的要快。
所以问题是,继续使用gvim的首选方法是什么, 尽可能少的努力(设置系统可能很费力),这样我就可以 仍然继续使用vim的全部功率。解决方案不需要使用 远程vim,它应该只是最小化gvim窗口。
答案 0 :(得分:4)
我迟到了这个派对,但我有一个建议。
首先,我同意@Herbert - 通常没有理由运行多个Vim实例(控制台或其他)。将事物保持在一个实例中的好处太大了。但是,我认为需要混合-c
;虽然我不认为有必要自己做:D。
我能看到获得此功能的最佳方式是使用vim的--remote-send
功能而不是--remote-silent
。这意味着一些shell脚本,但是:
#!/bin/bash
function resolveFile
{
if [ -f "$1" ]; then
echo $(readlink -f "$1")
else
echo "$1"
fi
}
function gg
{
local opts=$(getopt -o c: --long command: -n "gg" -- "$@")
if [ $? != 0 ]; then return 1; fi
eval set -- "$opts"
cmd=""
while :
do
case "$1" in
-c|--command)
cmd="$2"
shift 2
;;
--) shift
break
;;
esac
done
if [[ -n "$cmd" ]]; then
if [[ -n "${1-}" ]]; then
cmd=":e $(resolveFile $1)<cr>$cmd<cr>"
else
cmd="$cmd<cr>"
fi
shift 1
fi
files=""
for f in $@
do
files="$files $(resolveFile $f)"
done
cmd="$cmd:args! $files<cr>"
gvim --remote-send "$cmd"
}
我只是稍微测试了一下,但你应能够做以下事情:
gg -c G file1 file2 file3 file4
那应该编辑 file1
并移到其底部。然后,它还应该将file2
,file3
和file4
添加到args列表中,以便您可以执行:bnext
等命令。当您不提供--remote-silent
时,它还应恢复为与-c
相同的功能。
我确实认为值得跳过这些箍,以便将您的命令行体验与单个Vim实例正确集成。把所有东西放在一个地方太甜蜜了,不能放弃。
答案 1 :(得分:1)
我不认为运行多个gvim实例是一个不错的解决方案。为什么不只有一个gvim --remote-silent
的别名,当你不需要额外的开关时(大概是大部分时间),而另一个别名只有gvim
,当你想添加命令时...线路开关?对我来说似乎很好,没有多少要记住。
除了获得许多难以跟踪的窗口之外,运行多个gvim实例的主要不愉快之处在于每个gvim都有自己的运行时环境,更难以在不同gvim实例的缓冲区之间共享和复制数据。 / p>
德里克·怀亚特(Derek Wyatt)有一段有趣的视频 - 远程沉默;我认为它不能解决您的问题,但您可能有兴趣观看它: OneVimToRuleThemAll
此外,如果问题是gvim中的窗口拆分正在占用屏幕空间,请更好地使用选项卡功能(您甚至可以禁用实际的选项卡标签,但保持打开标签页的隐喻)和/或只是在两者之间导航缓冲区,同时一次只能看到一个缓冲区。