小编bev*_*bev的帖子

如何从命令行打开现有 emacs 进程中的文件?

我有几个脚本可以启动与特定项目相关的所有应用程序和文件。但是,它会启动多个 emacs 实例,而不是简单地使当前的 emacs 打开请求的文件。我宁愿当前的 emacs 只是在新缓冲区中打开项目文本文件。

任何想法我怎么能做到这一点?

command-line emacs

19
推荐指数
2
解决办法
8791
查看次数

使用脚本更改当前工作目录

我已经阅读了这个问题和答案,但它并不适合我的问题,即使它很相似。

我正在编写一个脚本(称为 cpj),它将启动我当前的项目之一。我有大约 5 个。当我打字

$ cpj blah

我希望当前工作目录更改为 blah 项目目录(我保存在 $PROJDIR 中),并且我希望 emacsclient 打开该项目的主文件(我保存在 $MAINFILE 中)。

我引用的问题说你不能直接改变运行脚本的 shell 的环境,但你可以获取一个脚本,它会这样做。

为了测试这一点,我编写了一个 shell 脚本(称为 chcwd),其中有一行:

cd $1

如果,从命令行我做:

$ . chcwd $PROJDIR

我当前的工作目录将根据需要更改。另一方面,如果从我的 cpj 脚本中,我有相同的行:

. chcwd $PROJECT

它不会改变 shell 的当前工作目录。我意识到我正在运行 2 个脚本(cpj,然后是 chcwd),因此创建了 2 个 shell,但我看不出有什么办法可以完成我想要的。谁能告诉我如何实现我的目标?

shell cd-command

8
推荐指数
1
解决办法
2万
查看次数

子字符串和正则表达式

我有一个包含在变量中的字符串,我想根据相对于另一个子字符串的位置提取子字符串。除非将字符串作为 arg 发送到函数,否则我的解决方案似乎有效。我正在使用 bash shell。

#!/usr/bin/bash

var0="-a check one two three"
var1="check"

function getsubstr() {
echo ${*#*"${2}"} 
}

# this prints 'one two three' which is what I want
echo ${var0#*"${var1}"}

# this prints '-a one two three', not what I want.
getsubstr $var0
Run Code Online (Sandbox Code Playgroud)

请注意,当我放入echo $*getsubstr函数时,它会打印与$var0(-> '-a check one two Three')相同的字符串,而当我放入echo $2getsubstr函数时,它会打印与$var1(-> 'check')相同的字符串。因此,在我看来,我要求在两种情况下都打印相同的子字符串。

另一个难题是,如果不是echo ${*#*"${2}"}getsubstr我使用的函数中echo ${*%"${2}"*},而是得到完全相同的结果。

任何帮助理解这种行为将不胜感激。

顺便说一句,我意识到 ${*:3}getsubstr函数内部可以返回我想要的子字符串,但我试图理解 …

bash regular-expression

5
推荐指数
1
解决办法
3258
查看次数

你如何设置“T”位?

我的 TeX Live 安装有一个名为的文件.texlive2015,最初设置为drwx------T. 我改变了它,我想把它改回来,但我无法找回“T”。我如何取回它?

shell permissions

4
推荐指数
2
解决办法
2万
查看次数

使用正则表达式和变量的 ANDed 条件

我想测试从文件中读入的一行是否具有特定的开头和结尾,其中包含保存在变量中的单词。这是一些代码:

输入文件是:

line one
#; line two
#; line three blah
line four
Run Code Online (Sandbox Code Playgroud)

失败的最小脚本是:

declare ENDOFLINE= "blah"
exec 3< "inputfile"

while read LINE <&3
do
    if [[ ("$LINE" =~ "^#;") && (( ("$LINE" =~ "${ENDOFLINE%$}") )) ]]; 
    then
    echo score!
    else echo no score
    fi
done
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做:

if [[ ("$LINE" =~ "^#;") && (( ("$LINE" =~ "blah$") )) ]];
Run Code Online (Sandbox Code Playgroud)

它成功识别了正确的行(=> #;第三行等等)。换句话说,我需要一个复合测试条件,其中第一个测试是行首是否为“#;” 该行的结尾是包含在变量 $ENDOFLINE 中的字符串。

谢谢你的帮助。

bash ksh zsh regular-expression

3
推荐指数
1
解决办法
1121
查看次数