我正在尝试改进我的屏幕软件,所以我会有很多问题,因为有许多答案我很难在互联网上找到...无论如何,这个是关于shell命令我会喜欢在打开时执行的屏幕,但它没有......
在新的屏幕会话中,我要求屏幕打开一些窗口并命名它们并在每个窗口中打开一个文件,然后垂直拆分并打开到新的空窗口:
screen -t name1 vim /path/to/folder/file1.txt
screen -t name2 vim /path/to/folder/file2.txt
screen -t name3 vim /path/to/folder/file3.txt
screen -t name4 vim /path/to/folder/file4.txt
split -v
focus
screen
focus
screen
但是这些文件像往常一样创建.file.txt.swp和.file.txt.swo隐藏文件,因此当我的计算机关闭并且文件未正确关闭时,当我重新打开屏幕时它会询问我必须做什么使用.sw *文件...我想首先运行此命令rm /path/to/folder/.*.sw*
,这样它在打开时不会要求操作(“。file.txt.swp已经存在![O]打开,[ E] dit dit,[R] ecover,[Q] uit,[A] bandoned“)
在shell rm path/to/folder/.*.sw*
中按预期删除每个交换文件,但我无法在.screenrc中使用它
这不起作用:
rm /path/to/folder/.*.sw*
screen -t name1 vim /path/to/folder/file1.txt
screen -t name2 vim /path/to/folder/file2.txt
screen -t name3 vim /path/to/folder/file3.txt
screen -t name4 vim /path/to/folder/file4.txt
split -v
focus
screen
focus
screen
这两个都没有:
exec rm /path/to/folder/.*.sw*
...
也不是:
eval 'rm /path/to/folder/.*.sw*'
...
甚至是这样:
stuff rm /path/to/folder/.*.sw*
...
还有很多其他'盲目'尝试......
我不知道我在做什么:p
答案 0 :(得分:1)
在.screenrc
中,screen
命令采用字符串,它会自行评估,而不是传递给shell。因此,您可以轻松地将多个命令组合在一起......例如,像这样的配置行:
screen -t test1 touch foo; touch bar
会导致触及三个文件 - foo;
,touch
和bar
。 :)
相反,您可以运行shell解释器来运行多个命令,包括vim
:
screen -t name1 sh -c 'rm /path/to/my/.file1.sw*; vim /path/to/my/file1.txt'
传递给sh
命令的选项将被正确解释,因为在屏幕内,它们只是一个选项。
如果您真的打算这样做,可能会遇到冲突,因为name2
和name3
等会在另一个窗口中删除它们的同时生成交换文件,所以你可能会这样做:
screen -t name1 sh -c 'rm /path/to/my/.file1.sw*; vim /path/to/my/file1.txt'
screen -t name2 sh -c 'sleep 1; vim /path/to/my/file2.txt'
screen -t name3 sh -c 'sleep 1; vim /path/to/my/file3.txt'
screen -t name4 sh -c 'sleep 1; vim /path/to/my/file4.txt'
请注意,另一种选择可能是告诉vim
根本不创建交换文件。从表面上看,你可以通过以下方式实现:
:set noswapfile
要将它放在您的命令行上(而不是将其作为所有vim
实例的默认设置),您可以使用vim的-n
选项,这会导致vim打开文件没有交换:
screen -t name1 vim -n /path/to/my/file1.txt
screen -t name2 vim -n /path/to/my/file2.txt
screen -t name3 vim -n /path/to/my/file3.txt
screen -t name4 vim -n /path/to/my/file4.txt
结果当然是对四个文件的未保存更改将会丢失。
另一个选项可能是将临时文件移动到单独的位置。例如,如果您使用tmpfs
/ shmfs
并且每次重新启动时/ tmp目录为空,则可以使用:
screen -t name1 vim --cmd 'set dir=/tmp' /path/to/my/file1.txt
screen -t name2 vim --cmd 'set dir=/tmp' /path/to/my/file2.txt
screen -t name3 vim --cmd 'set dir=/tmp' /path/to/my/file3.txt
screen -t name4 vim --cmd 'set dir=/tmp' /path/to/my/file4.txt
然后,如果vim
实例因服务器关闭以外的其他原因而被杀死,您仍然可以恢复该文件。
答案 1 :(得分:-1)
当“.file.swp已经存在![O]打开,[E] dit无论如何,[R] ecover,[Q] uit,[A] bandoned”,你将有更多的运气去除“.file.swp “那么当你试图删除”file.swp“时,你不觉得吗?
你没注意到 DOT 吗?