如何打开多个终端选项卡并在 Vim 中打开文件并更改目录?

如何打开多个终端选项卡并在 Vim 中打开文件并更改目录?

我问这个问题是因为我尝试了很多找到的解决方案但都没有用:

  • gnome-terminal --save-config=...导致错误,此选项不再可用

  • gnome-terminal --tab -- 'vim ~/Files/file.txt'创建 shell 脚本导致错误,我的系统是德语的,但似乎

    There was an error creating the child process for this terminal
    Failed to execute child process "vim ~/Files/file.txt" (No such file or directory)
    

    并且什么都不做,只是使用vim没有文件来打开作品

  • 用一个会话管理器只是自动打开终端,但不显示任何标签

  • 并且gnome-terminal --tab -- 'cd ~/Files/'也不起作用(类似上述错误)

版本是# GNOME Terminal 3.28.2 using VTE 0.52.2 +GNUTLS -PCRE2。也许我的解决方法有错误,或者您知道其他(更好的)替代方案?

感谢你们对我的帮助!

答案1

我能找到的最接近实现这一点的方法需要创建多个脚本。gnome-terminal多年来发生了变化,并且-x--command选项已被严重弃用。最好的办法是为要运行和使用的每个选项卡创建配置文件:

gnome-terminal --tab-with-profile=Something1 --tab-with-profile=Something2

如果你在命令中使用类似~或的内容,那么很可能是那些*惯于被评估,因为这实际上是 shell (bash) 的工作gnome-terminal,因此在某处创建一个实际的脚本并告诉gnome-terminal使用它可能会有所帮助。

答案2

该脚本打开新标签页:

  1. pathtabs.list将(foo-test) 路径列表保存到新的终端选项卡中;
  2. 创建一个新脚本autotab.shxdotool格式化任何路径列表,向命令添加controlshiftt快捷方式和s;cd
  3. autotab.sh对 xdotool 格式有用<any-list-of-paths>
  4. 用法:autotab.sh <any-list-of-paths>;
  5. 为创建foo_*测试目录pathtabs.list
  6. 运行./autotab.sh pathtabs.list并将输出保存到新脚本maketabs.sh
  7. maketabs.sh对于打开与原始相同的一组选项卡/路径很有用pathtabs.list

...并运行命令:

  1. 保存pathncommtabs.list(foo-test) 路径和命令列表以在新终端选项卡中运行;
  2. 创建一个新脚本autopctab.shxdotool格式化任何路径和命令列表,并向命令添加controlshiftt快捷方式;和s;cd
  3. autopctab.shxdotool对于格式化很有用<list-of-paths-and-commands>(参见pathncommtabs.list);
  4. 用法:autopctab.sh <list-of-paths-and-commands>;(见pathncommtabs.list
  5. 运行./autopctab.sh pathncommtabs.list并将命令列表保存到新脚本makepctabs.sh
  6. makepctabs.sh有助于打开与原始相同的一组选项卡/路径/命令pathncommtabs.list
#open-several-tabs-with-xdotool-slowly-and-easily
#!/bin/bash
#pathtabs.list
if [ ! -f ~/pathtabs.list ]; then
echo ~/foo_00 > pathtabs.list
echo ~/foo_00/foo_00_1 >> pathtabs.list
echo ~/foo_00/foo_00_2 >> pathtabs.list
echo ~/foo_00/foo_00_2/foo_00_2_1 >> pathtabs.list
fi
echo 'pathtabs.list: has a list of paths for the new tabs'

#mkdirs
if [ ! -d ~/foo_00/ ]; then
mkdir foo_00
mkdir foo_00/foo_00_1
mkdir foo_00/foo_00_2
mkdir foo_00/foo_00_2/foo_00_2_1
fi
echo 'mkdirs: testing foo_*' 

##commtabs.list
if [ ! -f ~/commtabs.list ]; then
echo nano newfile1.txt > commtabs.list
echo nano newfile2.txt >> commtabs.list
echo nano newfile3.txt >> commtabs.list
echo nano newfile4.txt >> commtabs.list
fi
echo 'commtabs.list: has a list of commands to run on the new tabs'

#pathtabs.list+commtabs.list+options
if [ ! -f ~/pathncommtabs.list ]; then
cat pathtabs.list |sed 's/.*/cd &;/'|sed '1s/^/c+s+t;/'|\
paste - commtabs.list|tr -d '\t' |sed '$!s/$/;c+s+t/' > pathncommtabs.list
fi
echo 'pathncommtabs.list: integrates pathtabs.list+commtabs.list+cd+;+(new-tab-tokens)'

#autopctab.sh <anypathncommtabs.list>
if [ ! -f ~/autopctab.sh ]; then
echo '#!/bin/bash' > autopctab.sh
echo 'cat $1| sed '\''s/ /#/g'\''| sed '\''s/\(.\)/\1 /g'\''|sed '\''s/#/space/g'\''|\
    sed '\''s/~/asciitilde/g'\''|sed '\''s/_/underscore/g'\''|sed '\''s/c + s + t/control+shift+t/g'\''|\
    sed '\''s/\//slash/g'\''|sed '\''s/\./period/g'\''|sed '\''s/;/Return/g'\''|\
    sed '\''s/.*/xdotool key --delay 18  & Return/'\''' >> autopctab.sh
chmod u+x autopctab.sh
fi
echo 'autopctab.sh: xdotool-format paths+commands+(xdotool-commands)'

#run autopctab.sh <pathncommtabs.list>
#makepctabs.sh
if [ ! -f ~/makepctabs.sh ]; then
echo '#!/bin/bash' > makepctabs.sh
./autopctab.sh pathncommtabs.list >> makepctabs.sh
chmod u+x makepctabs.sh
fi
echo 'makepctabs.sh: run xdotool command lines to OPEN new tabs AND RUN commands with pathncommtabs.list'

#autotab.sh <anytabs.list>
if [ ! -f ~/autotab.sh ]; then
echo '#!/bin/bash' > autotab.sh
echo 'cat $1|sed '\''s/.*/cd &/'\''|sed '\''s/ /#/g'\''|\
    sed '\''s/\(.\)/\1 /g'\''|sed '\''s/#/space/g'\''|\
    sed '\''s/~/asciitilde/g'\''|sed '\''s/_/underscore/g'\''|\
    sed '\''s/\//slash/g'\''|sed '\''s/\./period/g'\''|\
    sed '\''s/.*/xdotool key --delay 18 control+shift+t space c d space asciitilde Return & Return c l e a r Return/'\'''  >> autotab.sh
chmod u+x autotab.sh
fi
echo 'autotab.sh: xdotool-format ONLY paths+(xdotool-commands)'

#run autotab.sh <pathtabs.list>
#maketabs.sh
if [ ! -f ~/maketabs.sh ]; then
echo '#!/bin/bash' > maketabs.sh
./autotab.sh pathtabs.list >> maketabs.sh
chmod u+x maketabs.sh
fi
echo 'maketabs.sh: run xdotool command lines ONLY to open new tabs with pathtabs.list'

#run-maketabs?
#./maketabs.sh

#remove-maketabs.sh?

#remove-autotab.sh?
#rm autotab.sh

#remove-pathtabs.list?
#rm pathtabs.list

#run-makepctabs?
#./makepctabs.sh

#remove-makepctabs.sh?
#rm makepctabs.sh

#remove-autopctab.sh?
#rm autopctab.sh

#remove-pathncommtabs.list?
#rm pathncommtabs.list

#remove-dirs?
#rm -r foo_0?

#echo See also 'https://askubuntu.com/a/380320'
#echo '        https://www.semicomplete.com/projects/xdotool/'
#echo '        https://github.com/jordansissel/xdotool'

相关内容