我正在尝试创建一个小的 Python/curses 应用程序。
但据我所知,没有办法判断是否 CTRL+J 或 Enter 已被按下。现在这可能是因为它们都具有相同的 ascii 码 (10):
http://en.wikipedia.org/wiki/Control_character#In_ASCII
但是 VIM 如何区分这两者呢?
最佳答案
Enter 通常等同于 C-m。但是,如果 icrnl
标志对 tty 有效(参见 stty -a
),则输入的 C-m 将自动转换为 C-j(以便于键入只需按 Enter 即可以 Unix 方式终止行。
在纯 C 中,您可以使用 termios 函数 tcgetattr(3) 和 tcsetattr(3) 取消设置 中的 ICRNL 标志>c_iflag
这样 C-m 就不会在输入时转换为 C-j。如果你想绝对控制输入和输出,你可以使用“原始”模式(禁用所有输入和输出处理)。看起来像 Python has these termios functions .
curses 库有一些处理 tty 模式的高级函数:savetty(3)、resetty(3)、nonl(3)、raw(3)、cbreak(3) 等。它也看起来像 Python has these curses functions .
如果您正在使用 curses 库的其他部分,那么最好也使用它的函数来调整 ICRNL 标志(例如 nonl(3))以避免破坏库所做的任何假设(即它假设 tty 是按一种方式设置的,但是您的 termios 级调用会改变事情并破坏该假设)。
关于python - VIM 如何区分 `Ctrl-J` 和 `LF` 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615717/