C'è un modo per alias `: w'` a`: w`, per evitare di creare file denominati '?


9

Occasionalmente, il mio mignolo sfiora la 'chiave mentre cerca di entrare, risultando :w'<Enter>.

Ho provato:

cabbrev w' :w
cabbrev w\' :w
cabbrev "w'" :w

Nessuno di loro funziona. C'è un modo per alias :w'per :w?

Uso anche cmdwin ( :help cmdwin+ nnoremap : :<C-F>) invece della normale riga di comando, quindi punti bonus se funziona anche lì.


3
hah; Ho lo stesso problema con \
Martin Tournoij il

Risposte:


8

Come sottolinea Peter Rincker, cmaps può espandersi anche in altri luoghi, quindi cnoreabbrevsarebbe meglio :

cnoreabbrev w' w

O, il più sicuro, grazie ancora a Peter:

cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"

Controllando esplicitamente se la riga di comando contiene solo w', è possibile evitare espansioni indesiderate in situazioni.

Puoi usare un cmap:

cmap w' w

Dovresti ancora premere Enter, ma un incidente 'dovrebbe essere ignorato ora.

Se stai usando cmdwin, un inoremapset di autocmdpotrebbe essere utile:

autocmd CmdwinEnter * inoremap w' w
autocmd CmdwinLeave * iunmap w'

Ho corso :cmap w' w, ma non ci sono stati cambiamenti nel comportamento. :w'risulta comunque nella scrittura in un file denominato '. "'" [New] 0L, 0C written.
mwcz,

@mwcz Viene 'effettivamente visualizzato quando lo si preme dopo w? Non dovrebbe essere cmapcreato correttamente: un cmap LHS viene automaticamente compilato con RHS, quindi se si preme a ', dovrebbe comunque essere visualizzato w.
Muru,

1
Fate attenzione con nudi cmap's e cabbrevs'. Eseguiranno / si espanderanno in altre modalità e in altri luoghi. eg :s/'follow'/fooe /'follow'. Si prega di vedere la seguente modifica di vim: x funzione per eliminare il buffer invece di salvare e uscire o utilizzare cmdalias.vim
Peter Rincker

1
Meglio prevenire che curare:cnoreabbrev <expr> w' getcmdtype() == ":" && getcmdline() == "w'" ? "w" : "w'"
Peter Rincker,

Sì, viene 'ancora visualizzato, ma ho appena capito che sto usando cmdwin per inserire i comandi e cmdwin è solo un buffer normale, quindi cmap/cnoreabbrevnon lavorare lì. Aggiornamento della risposta con noreabbrevopzione per utenti cmdwin. :) Grazie!!!
mwcz,

0

Questo metodo funziona per me:

:ca w' w

In alternativa puoi impostare il tuo vim per salvare il buffer corrente quando premi due volte Esc, ad es

:map <Esc><Esc> :w<CR>

Oppure usa il seguente mapping per salvare il file con Ctrl+ so F2:

nmap <c-s> :w<CR>
vmap <c-s> <Esc><c-s>gv
imap <c-s> <Esc><c-s>

nmap <F2> :update<CR>
vmap <F2> <Esc><F2>gv
imap <F2> <c-o><F2>

Nota: F2 salva solo se necessario e riporta l'utente alla modalità di inserimento (o ripristina la selezione visiva), se necessario.

Fonte: salvataggio di un file su vim wikia

Oppure usa le seguenti alternative:

  • :up( :update) per:w
  • ZQ per :q
  • ZZper :wqo:x

Notare le virgolette nella domanda. :w'no :w. Voglio usare :wsenza colpire accidentalmente ', che scrive un file che devo quindi rm \'. Buoni consigli, comunque.
mwcz,

1
Ctrl-S non invia un sigstop - se il programma si arresta, è probabilmente perché un buffer era pieno. Vedi unix.stackexchange.com/questions/13629/… '
muru,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.