You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scite及Ruby中gets/STDIN.getc捕获已删除字符,如何获取最终输入?

Ruby捕获终端输入时忽略已删除字符的解决方法

问题现象

在Scite环境下运行Ruby程序时,输入过程中删除的字符会被一起捕获:

  • 使用gets方法读取输入,最终结果包含输入时删除的字符(比如输入"raja",输出却是"rajaagoa\n")
  • 尝试逐字符读取STDIN.getc,仍然存在相同问题,代码示例:
page_name = ""
while (char = STDIN.getc) != "\n"
  page_name += char
end

解决方案

使用Ruby标准库中的Readline模块,它会自动处理终端的行编辑操作(退格、删除等),仅返回用户最终确认的有效输入。

示例代码:

require 'readline'

puts "Enter your name : "
STDOUT.flush
name = Readline.readline.chomp
p name

原理说明

gets和STDIN.getc直接读取原始输入流,当终端处于原始模式时(比如Scite的运行环境),不会自动处理编辑操作产生的控制字符。而Readline模块封装了行编辑逻辑,会过滤掉删除操作对应的字符,只保留最终的输入内容。

内容的提问来源于stack exchange,提问作者Rajagopalan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:12:09