возвышенная команда, использующая перевод экранированных символов неправильно - PullRequest
1 голос
/ 12 апреля 2019

У меня есть команда escape и вставки, которую я использую при работе с уценкой:

{ "keys": ["ctrl+shift+v"], 
    "command": "escape_and_paste", 
    "args": {
        "\\": "\\\\",
        "_" : "\\_",
        "*" : "\\*"
    }
}

, а фактическая команда определяется как:

import sublime
import sublime_plugin

class EscapeAndPasteCommand(sublime_plugin.TextCommand):
    def run(self, edit, **kwargs):
        # Get the clipboard text
        originalText = textToPaste = sublime.get_clipboard() 

        # Use the arguments as a translation table
        textToPaste = textToPaste.translate(str.maketrans(kwargs))

        # Place the text back into the clipboard and paste in place
        sublime.set_clipboard(textToPaste)
        self.view.run_command("paste")

        # Restore the original text to the clipboard
        sublime.set_clipboard(originalText)

Что нужно сделать, так это escapeобратная косая черта, подчеркивание и звездочки с обратной косой чертой.Однако это имеет странные последствия для текста, подобного следующему:

"skylling\sdfds and _adst_", который экранируется до: "skylling\\sdfds and \\_adst\\_", когда должно быть "skylling\\sdfds and \_adst\_".Не совсем уверен, почему

Когда я запускаю этот тест в Python напрямую, я не получаю эту проблему.

textToPaste = 'skylling\sdfds and _adst_'
escapay = {
    "\\": "\\\\",
    "_": "\\_",
     "*": "\\*"
 }
print(textToPaste.translate(str.maketrans(escapay)))

skylling\\sdfds and \_adst\_

Это из-за того, как мои аргументы отправляются команде my py sublime, или из-за неправильного понимания того, как работает translate()?Запуск Sublime Text 3 build 3143.

...