python - VIM 如何区分 `Ctrl-J` 和 `LF` 之间的区别?

标签 python vim ncurses python-curses

我正在尝试创建一个小的 Python/curses 应用程序。

但据我所知,没有办法判断是否 CTRL+JEnter 已被按下。现在这可能是因为它们都具有相同的 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/

相关文章:

Python 导入没有 "from"

python - pyspark 1.3.0 将数据框保存到 HIVE 表中

regex - VIM:替换没有参数的函数调用

search - 如何在 Vim 中通过搜索所有缓冲区的内容直接进入任意缓冲区,就像在 Sublime Text 中按 Ctrl+P 一样?

c - Main 端出现段错误,提供 GDB 输出

terminal - 使用 Ncurses 打印双倍大小的字符

python - LaTeX 与 Python 3.7 和 Matplotlib

c++ - 如何跳转到 C/C++ 函数声明而不是其定义?

c - NCURSES 在 elementryOS 终端中不显示滚动条

python - Django 在运行时添加模型方法