在特定目录、特定工作区中打开终端的脚本,然后使用 VIM 转到特定文件

在特定目录、特定工作区中打开终端的脚本,然后使用 VIM 转到特定文件

奖金: vsplit 到另一个文件。;)

我有 9 个工作区,并且经常有多个终端在不同的文件上运行 VIM。对于一个项目来说,这种设置非常标准——但我必须打开五个终端,将每个终端移动到自己的工作区,最大化,在 VIM 中打开 .hpp 文件并拆分其对应的 .cpp 文件每个终端

我想为此编写一个脚本,但不知道该怎么做!在 Google 上搜索并在 gedit 上测试后,我开始使用类似

wmctrl -s 4 ; gedit & sleep 3; wmctrl -s 0;

但这只会在我当前所在的工作区中打开 gedit。一个潜在的问题(但我对此不太了解,不知道这是否真的是个问题)是我使用了 Compiz 壁纸功能,该功能允许在不同的工作区上使用不同的壁纸。

理想情况下,我希望开发一个可以为我完成这项工作的脚本,而不是插件。

有什么提示或想法吗?

答案1

下面的脚本为文本编辑器生成 6 个窗口gnome-terminalvi并将它们移动到 Unity 桌面中的适当视口(又名工作区)。

该脚本以数学方式确定哪个窗口属于哪个工作区。它依靠 来wmctrl完成大部分工作。要安装wmctrl,请执行sudo apt-get install wmctrl

#!/bin/bash
# Author: Serg Kolo
# Date: Aug 22 , 2015
# Description: script that spawns 6 windows and positions
# them on individual workspaces (aka viewports) for Unity
# Written for: https://askubuntu.com/q/664309/295286
#set -x

# get number of vertical and horisontal viewports
HEIGHT=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize)
WIDTH=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize)
# Get size of the desktop from wmctrl -d
# ARRAY[0] is width and ARRAY[1] is height
ARRAY=($( wmctrl -d | awk -v div1=$HEIGHT -v div2=$WIDTH '{gsub(/x/," "); print $4/div1" "$5/div2}' ))
# set number of windows
COUNT=6
# while loop that does all the work
while [ $COUNT -ne 0 ]; do
# reset x and y position on each iteration
XPOS=100
YPOS=100
    # spawn terminal window with appropriate number
    # and send to viewport according to number
    gnome-terminal -e 'sh -c "vi;bash"' -t VP$COUNT &
    sleep 0.250 # delay to make sure window spawns
    # determine if it's a window 3 or 6
    if [ $( expr $COUNT % 3 ) -eq 0 ];then 
        XPOS=$( expr $XPOS + ${ARRAY[0]} + ${ARRAY[0]} )
    fi
    # determine if it's window 4 - 6
    if [ $COUNT -gt 3 ];then
        YPOS=$( expr $YPOS + ${ARRAY[1]} )
    fi
    # determine if it's window 2 or 5
    if [ $( expr $COUNT % 3 ) -eq 2 ];then 
        XPOS=$(  expr $XPOS + ${ARRAY[0]} )
    fi
    sleep 0.250
    # bring that window to focus and move it
    wmctrl -R VP$COUNT
    wmctrl -r VP$COUNT -e 0,$XPOS,$YPOS,250,250
    # decrement counter
    COUNT=$( expr $COUNT - 1 )
done

参考文献和其他材料:

在特定视口和位置打开应用程序窗口的脚本(或软件)

创建并运行脚本

如何在登录时自动启动应用程序

如何将 .sh 文件绑定到键盘组合

相关内容