string - elisp 中的转义字符串

标签 string emacs lisp elisp

我是 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/

相关文章:

emacs - 在 Emacs 中逐步向后导航位置历史记录

Dart Petitparser 处理 Lisp 代码

functional-programming - 是否有并行化的 Scheme 实现?

lisp - 特殊的阅读器宏,如 [ ]、{ }

c++ - 哪种数据结构和算法适用于此?

java - String split() 方法,零和负限制

c# - 如何将一些带条件的字符串连接在一起?

validation - 即时银行帐号验证

emacs - Emacs 中是否有用于函数调用层次结构的功能

javascript - 一个函数,它将在数组中搜索字母并返回这些字母所在的位置