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

Dav*_*ter 7 python vim ncurses python-curses

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

但据我可以看到有没有办法知道是否 CTRL+ JEnter已被按下.现在这可能是因为它们都具有相同的ascii代码(10):

http://en.wikipedia.org/wiki/Control_character#In_ASCII

但VIM如何区分这两者呢?

Chr*_*sen 11

Enter通常相当于厘米.但是,如果icrnl标志对tty有效(参见参考资料stty -a),则输入Cm将自动转换为Cj(这样只需按下即可轻松键入Unix-ly终止行Enter).

在普通C中,您可以使用termios函数tcgetattr(3)tcsetattr(3)来取消设置ICRNL标志,c_iflag以便在输入时Cm不会转换为Cj.如果要对输入和输出进行绝对控制,可以使用"原始"模式(禁用所有输入和输出处理).看起来Python具有这些termios功能.

curses库有一些处理tty模式的高级函数:savetty(3),resetty(3),nonl(3),raw(3),cbreak(3)等.看起来Python也有这些诅咒功能.

如果你正在使用curses库的其他位,那么最好也可以使用它的函数来调整ICRNL标志(例如nonl(3)),以避免破坏库所做的任何假设(即它假设tty是设置一种方式,但你的termios -level调用改变了事情并打破了这个假设).