Vim启动项目文件 - bash脚本

时间:2017-07-10 20:59:09

标签: bash shell vim

该程序应打开3个vim终端,每个终端打开3个文件。我在每个子文件夹中都有一个startup.txt文件,其中包含我要启动的每个文件的名称。 (每行一个名字)

需要解决的问题:

如何使第22行的命令可执行?当我尝试运行此命令时,它会给我以下错误(它会打开每个startup.txt中的第一个文件)

错误:

/ home / george / bin / project:第17行:找不到vsp:命令

/ home / george / bin / project:第19行:找不到vsp:命令

/ home / george / bin / project:第17行:找不到vsp:命令

/ home / george / bin / project:第19行:找不到vsp:命令

更新代码:

  1 #!/bin/bash
  2 
  3 ADDR_FILE=~/Documents/CEDA         #address to the file
  4 ADDR_CEDA=$ADDR_FILE/ceda_lib      #address for ceda_lib
  5 ADDR_GENERAL=$ADDR_FILE/general    #address for general
  6 ADDR_CLI=$ADDR_FILE/CLI            #address for CLI
  7 
  8 function getFile
  9 {
 10     awk 'NR=='$1 $2/startup.txt
 11 }
 12 
 13 for i in $ADDR_CEDA $ADDR_GENERAL $ADDR_CLI; do
 14     CMD_2=""
 15     CMD_3=""
 16     if [ $(getFile 2 $i) ]; then                    #checks if line 2 isn't blank
 17         CMD_2=-c "vsp $i/$(getFile 2 $i)"
 18         if [ $(getFile 3 $i) ]; then                #checks if line 3 isn't blank
 19             CMD_3=-c "vsp $i/$(getFile 3 $i)"
 20         fi
 21     fi
 22     gnome-terminal -e "vim $i/$(getFile 1 $i) $CMD_2 $CMD_3"
 23 done

示例startup.txt:

file1.cpp
file2.hpp
file3.hpp

请注意我是bash脚本的初学者。任何一般性建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

我不确定你要使用vim完成什么,因为我没有使用该语法,但这里有一些提示。

您可以使用简单的getline()命令轻松替换sed函数。如果file包含:

line 1
line 2
line 3

尝试跑步:

sed '2!d' file

并且您将看到它删除除第2行以外的所有行。因此,您的vim命令开始如下所示:

vim -c vsp $i/$(sed '2!d' $i)

如果你想要三个xterm,你需要开始三个,并告诉每个人执行一个新的vim。如果您希望它们一次全部运行,则需要在最后使用&对它们进行背景。这意味着您的脚本开始如下所示:

for i in "file1" "file2" "file3" ; do
   xterm -e "vim -c vsp $i/$(sed '2!d' $i) ... " &
done

答案 1 :(得分:1)

工作代码:

  1 #!/bin/bash
  2 
  3 ADDR_FILE=~/Documents/CEDA         #address to the file
  4 ADDR_CEDA=$ADDR_FILE/ceda_lib      #address for ceda_lib
  5 ADDR_GENERAL=$ADDR_FILE/general    #address for general
  6 ADDR_CLI=$ADDR_FILE/CLI            #address for CLI
  7 ADDRESSES="$ADDR_CEDA $ADDR_GENERAL $ADDR_CLI"
  8 
  9 if [ $1 ]; then                                         #checks for parameters
 10     if [ $1 = "-f" ] || [ $1 = "--files" ]; then
 11         for i in $ADDRESSES; do
 12         nautilus $i &
 13         done
 14         exit 0                                          #end script
 15     fi
 16 fi
 17 
 18 function getFile
 19 {
 20     awk 'NR=='$1 $2/startup.txt
 21 }
 22 
 23 for i in $ADDRESSES; do
 24     CMD_2=""
 25     CMD_3=""
 26     if [ $(getFile 2 $i) ]; then                    #checks if line 2 isn't blank
 27         CMD_2="-c \"vsp $i/$(getFile 2 $i)\""
 28         if [ $(getFile 3 $i) ]; then                #checks if line 3 isn't blank
 29             CMD_3="-c \"vsp $i/$(getFile 3 $i)\""
 30         fi
 31     fi
 32     gnome-terminal -e "vim $i/$(getFile 1 $i) $CMD_2 $CMD_3"
 33 done

随着时间的推移,我会添加更多内容,但它只是我希望它做的最低限度:D谢谢你所有的帮助!

PS:我已经编辑过很多次了。