如何在Vim中禁用退格键和删除键?

11

我希望使用Vim进行无干扰的写作,而不是PyRoom/TextRoom。这篇文章已经告诉我如何获取大部分设置,但我还想知道如何启用类似TextRoom风格的流模式:

如何禁用回退和删除键(不包括像d$这样的快捷键)?


禁用退格键如何促进“无干扰”写作?只是因为纠正自己会分散注意力而制造错别字吗?提供一些背景理由会让这个问题更好理解。 - Kaz
1
@Kaz,这是关于流程的问题。当你写散文时,最好保持写作状态,不要考虑每个单词或错误。目标是让思路畅通,将头脑中的想法转化为文字,不要在途中停顿。我从未尝试过用于编写代码,但同样的“进入流程”的想法可能也是正确的。 - mcbetz
2个回答

21

您可以通过将特定键映射到特殊的<Nop>目标来禁用单个键:

:inoremap <BS> <Nop>
:inoremap <Del> <Nop>

(假设您只想在插入模式下禁用它们。)


完全回答了我的问题! - mcbetz

-1
你可以不使用vim来编写代码,而是通过编写一个shell脚本,在原始模式下从tty读取内容,并且不允许大多数控制字符,包括退格和DEL键,并将内容输出两次:一次直接输出到终端,一次输出到标准输出,这样你就可以将工作重定向到文件中。
#!/bin/sh

saved_tty=$(stty -g < /dev/tty)

bail()
{
  stty $saved_tty < /dev/tty
  exit $?
}

trap bail EXIT INT

stty raw -echo < /dev/tty

while true ; do
  ch=$(dd bs=1 count=1 < /dev/tty 2> /dev/null)
  code=$(printf "%d" "'$ch")
  if [ $code -eq 4 ] ; then
    printf "\r\n" > /dev/tty
    printf "\n"
    break
  elif [ $code -eq 13 -o $code -eq 10 ] ; then
    printf "\r\n" > /dev/tty
    printf "\n"
  elif [ $code -ge 32 -a $code -lt 127 ] ; then
    printf "%s" "$ch" > /dev/tty
    printf "%s" "$ch"
  fi
done

将此保存为flow,执行chmod a+x flow,然后就可以使用了:
$ flow > file.txt
Backspace and del not allowed
here just type and type.
Then hit Ctrl-D when you're done; no Enter
required.

$ flow
ffoorrggoott  ttoo  rreeddiirreecctt!!

如果您需要一个空白屏幕,请首先使用clear或将屏幕清除添加到脚本中。

虽然聪明,但这并没有真正回答所问的问题。 - jon skulski
@jskulski X-Y 问题。问题问的是 X,但真正的问题是 Y。这个答案解决了 Y:实现一个程序,允许“流”输入文本(之后可以很容易地用 Vim 进行调整)。并不聪明,只是基本的 shell 脚本编程。 - Kaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接