在新视图(未保存的缓冲区)中打印文本,而不是在控制台中
Print text in new view (unsaved buffer), not in console
1。简要
我没有找到如何在新视图中获取输出,而不是在 Sublime Text 控制台中。
2。预期行为
比如我有倒计时:
import time
seconds = 10
while seconds >= 0:
time.sleep(1)
if seconds == 5:
print("5 seconds")
elif seconds == 0:
print("Time over!")
time.sleep(5)
else:
print(seconds)
seconds -= 1
Ctrl+Shift+P (⌘⇧p for Mac) → SublimeREPL: Python RUN current file
→ 我明白了预期行为:
3。实际行为
Sublime Text 插件中的相同倒数计时器:
import time
import sublime_plugin
seconds = 10
class LovernaStandardCommand(sublime_plugin.TextCommand):
def run(self, edit):
current_id = self.view.id()
if current_id:
global seconds
while seconds >= 0:
time.sleep(1)
if seconds == 5:
print("5 seconds")
elif seconds == 0:
print("Time over!")
time.sleep(5)
else:
print(seconds)
seconds -= 1
I 运行 命令 loverna_standard
→ 我在 Sublime Text 控制台中看到输出,而不是在新视图中。
4。没有帮助
- Python write() method 适用于文件,不适用于未保存的缓冲区。
- 我在 Sublime Text 3 API documentation 中找到如何打开新视图 —
sublime.active_window().new_file()
— 但我没有找到如何在此视图中打印文本。
您可以使用 append
命令将文本附加到 Sublime Text 视图。
例如,如果您希望视图在添加新文本时自动滚动到底部:
view.run_command('append', { 'characters': str(seconds) + '\n', 'scroll_to_end': True })
不过最好设置成每秒回调一次,而不是休眠,否则ST会在命令运行时无响应。
import sublime
import sublime_plugin
class LovernaStandardCommand(sublime_plugin.TextCommand):
def run(self, edit, seconds=10):
self.print_seconds(sublime.active_window().new_file(), seconds)
def print_seconds(self, view, seconds):
text = ''
if seconds > 0:
text = str(seconds)
if seconds == 5:
text += ' seconds'
sublime.set_timeout_async(lambda: self.print_seconds(view, seconds - 1), 1000)
else:
text = 'Time over!'
view.run_command('append', { 'characters': text + '\n', 'scroll_to_end': True })
1。简要
我没有找到如何在新视图中获取输出,而不是在 Sublime Text 控制台中。
2。预期行为
比如我有倒计时:
import time
seconds = 10
while seconds >= 0:
time.sleep(1)
if seconds == 5:
print("5 seconds")
elif seconds == 0:
print("Time over!")
time.sleep(5)
else:
print(seconds)
seconds -= 1
Ctrl+Shift+P (⌘⇧p for Mac) → SublimeREPL: Python RUN current file
→ 我明白了预期行为:
3。实际行为
Sublime Text 插件中的相同倒数计时器:
import time
import sublime_plugin
seconds = 10
class LovernaStandardCommand(sublime_plugin.TextCommand):
def run(self, edit):
current_id = self.view.id()
if current_id:
global seconds
while seconds >= 0:
time.sleep(1)
if seconds == 5:
print("5 seconds")
elif seconds == 0:
print("Time over!")
time.sleep(5)
else:
print(seconds)
seconds -= 1
I 运行 命令 loverna_standard
→ 我在 Sublime Text 控制台中看到输出,而不是在新视图中。
4。没有帮助
- Python write() method 适用于文件,不适用于未保存的缓冲区。
- 我在 Sublime Text 3 API documentation 中找到如何打开新视图 —
sublime.active_window().new_file()
— 但我没有找到如何在此视图中打印文本。
您可以使用 append
命令将文本附加到 Sublime Text 视图。
例如,如果您希望视图在添加新文本时自动滚动到底部:
view.run_command('append', { 'characters': str(seconds) + '\n', 'scroll_to_end': True })
不过最好设置成每秒回调一次,而不是休眠,否则ST会在命令运行时无响应。
import sublime
import sublime_plugin
class LovernaStandardCommand(sublime_plugin.TextCommand):
def run(self, edit, seconds=10):
self.print_seconds(sublime.active_window().new_file(), seconds)
def print_seconds(self, view, seconds):
text = ''
if seconds > 0:
text = str(seconds)
if seconds == 5:
text += ' seconds'
sublime.set_timeout_async(lambda: self.print_seconds(view, seconds - 1), 1000)
else:
text = 'Time over!'
view.run_command('append', { 'characters': text + '\n', 'scroll_to_end': True })