2012-12-06 9 views
6

Mi piacerebbe utilizzare Vim per scrivere senza distrazioni invece di PyRoom/TextRoom. This post, che menziona VimRoom, potrebbe già mostrarmi come ottenere la maggior parte delle impostazioni.Come disabilitare backspace ed eliminare le chiavi in ​​Vim?

mi manca solo il modo per abilitare la modalità flusso stile TextRoom:

Come posso disattivare backspace e cancellare le chiavi (non scorciatoie come d $)?

+0

Come fa un backspace disabilitato a promuovere la scrittura "distraction free"? Basta fare errori di battitura e lasciarli perché è fonte di distrazione correggere te stesso? Alcune motivazioni di fondo migliorerebbero questa domanda. – Kaz

+1

@ Kaz Riguarda il flusso. Quando scrivi la prosa, è una buona idea continuare a scrivere e non pensare a ogni singola parola o errore che fai. L'obiettivo è quello di fluire e portare il flusso di idee dalla tua testa al testo, senza fermarti lungo la strada. Non l'ho mai provato per scrivere codice, ma lo stesso "entra in circolazione", anche l'idea potrebbe essere vera. – mcbetz

risposta

12

È possibile disattivare singoli tasti da loro mappatura alla speciale <Nop> bersaglio:

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

(Dando per scontato che vogliono solo li disabilitate in modalità di inserimento.)

+0

Completamente risposto alla mia domanda! – mcbetz

-1

È possibile scorrere senza vim, facendo una script di shell che leggono dal tty in modalità raw e non consentono la maggior parte dei caratteri di controllo, inclusi backspace e DEL, ed echeggia le cose due volte: una volta direttamente sul terminale e una volta sullo standard output in modo da poter reindirizzare il lavoro su un file.

#!/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 

Salva questo come flow, chmod a+x flow e proprio:

$ 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!! 

Se avete bisogno di uno schermo vuoto, clear prima o aggiungere compensazione schermo allo script.

+0

Mentre intelligente, questo non è davvero rispondere alla domanda posta. – jskulski

+0

@jskulski Problema X-Y. La domanda richiede X, ma il vero problema è Y. Questa risposta affronta Y: implementazione di un programma che consente l'immissione del testo "flusso" (che può essere facilmente massaggiata con Vim in seguito). Non è affatto intelligente, solo script di shell di base. – Kaz

Problemi correlati