我对 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)