gpt4 book ai didi

string - elisp 中的转义字符串

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:11 24 4
gpt4 key购买 nike

我是 Lisp 的新手 - 尤其是 Elisp - 我在字符串处理方面遇到了问题:

我想将 Windows 样式路径转换为 ​​Unix 样式路径 - 特别是我需要转换我从 Visual Studio 到 Cygwin 路径的路径,因为我希望能够从Emacs 中的 Visual Studio(我希望为此使用 emacsclient --eval):

Visual Studio 路径具有以下格式:

C:\Users\name\documents\visual studio 2010\projects\test

我想将其更改为适当的 Cygwin 路径,即:

/cygdrive/c/Users/name/documents/visual studio 2010/projects/test

但是在暂存缓冲区中尝试以下操作已经失败:

(replace-regexp-in-string "\\" "\/" "C:\users\someone")
(subst-char-in-string ?\ ?/ "C:\users\someone")

>> Debugger entered--Lisp error: (error "Non-hex digit used for Unicode escape")

有没有办法让 Elisp 转义每个字符串中的反斜杠?

编辑:

下面是我如何通过外部工具从 Visual Studio 调用 emacs:

emacsclient -d 127.0.0.1:0.0 --eval '(convert-win-to-cygwin-path $(ItemPath))'

$(ItemPath) 将替换为我无法影响的 C:\Users\asf - 因此它会将带有单个反斜杠的字符串传递给我的 emacs需要在emacs中修改。

我可以让 emacs 知道它需要从单个反斜杠中生成双反斜杠吗?

编辑 2:解决方案

我通过实际调用将启动 emacs 的 shell 脚本更改了我尝试启动 emacs 的方式 - 这样我可以确保 emacs 获得正确的路径:

#!/bin/bash

export PATH="/usr/bin/:/bin/:$PATH"

filename=$1
line=$2
column=$3

cyged_path=$(cygpath "$filename")

echo "Cyged path: $cyged_path"

emacsclient -d 127.0.0.1:0.0 -n +$line:$column "$cyged_path"

我在 Visual Studio 中使用外部工具窗口中的以下参数调用它:

Path: <path_to_cygwin>\bin\bash.exe
Arguments: <path_to_script> $(ItemPath) $(CurLine) $(CurCol)

最佳答案

您不需要执行任何操作。

Cygwin 提供了专门用于将 Windows 路径转换为 ​​Cygwin 路径的命令,这样你就不需要为这类事情操心了。

cmd> C:\cygwin\bin\cygpath.exe "C:\Users\name\documents\visual studio 2010\projects\test"

/cygdrive/c/Users/name/documents/visual studio 2010/projects/test

编辑:我对反引号的 Windows shell 等效项感到好奇,并找到了 Batch equivalent of Bash backticks ,这表明您或许可以使用这一行来完成这一切?

cmd> for /f "usebackq tokens=*" %a in (`C:\cygwin\bin\cygpath.exe "$(ItemPath)"`) do emacsclient -d 127.0.0.1:0.0 "%a"

关于string - elisp 中的转义字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12911053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com