У меня есть команда 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.