2011-12-26 10 views
8

Sto provando a persuadere GVim 7.3 per stampare correttamente (:hardcopy) caratteri europei centrali (šđčćž ŠĐČĆŽ) in PDF. Impostazioni che credo di essere rilevanticaratteri dell'Europa centrale in Vim e stampa (PDFing) fuori

set encoding=utf8 
set fileencodings=ucs-bom,utf8,cp1250,latin1 
set guifont=Consolas:h9:cEASTEUROPE 
set printfont=Consolas:h9:cEASTEUROPE 

Dopo aver cambiato la codifica da cp1250 (e scrivere di nuovo, dal momento che il cambiamento di viti codifica l'alto) vengono stampati correttamente.

Ora, ho pensato che utf-8 fosse un set molto più grande e completo di cp1250. Perché dopo quella modifica vengono stampati correttamente o, cosa più importante, perché non posso usarli in combinazione con enc=utf-8 (che normalmente utilizzo a causa dell'abbondanza di altri caratteri, normalmente non accessibile)?

enter image description here

enter image description here


:version 
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 27 2010 17:59:02) 
MS-Windows 32-bit GUI version with OLE support 
Included patches: 1-46 
Compiled by [email protected] 
Big version with GUI. Features included (+) or not (-): 
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl 
+cmdline_hist +cmdline_info +comments +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff +digraphs -dnd 
-ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path +find_in_path +float +folding -footer +gettext/dyn 
-hangul_input +iconv/dyn +insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu 
+mksession +modify_fname +mouse +mouseshape +multi_byte_ime/dyn +multi_lang -mzscheme +netbeans_intg +ole -osfiletype 
+path_extra +perl/dyn +persistent_undo -postscript +printer -profile +python/dyn +python3/dyn +quickfix +reltime +rightleft 
+ruby/dyn +scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static 
-tag_any_white +tcl/dyn -tgetent -termresponse +textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual 
+visualextra +viminfo +vreplace +wildignore +wildmenu +windows +writebackup -xfontset -xim -xterm_save +xpm_w32 
    system vimrc file: "$VIM\vimrc" 
    user vimrc file: "$HOME\_vimrc" 
2nd user vimrc file: "$VIM\_vimrc" 
     user exrc file: "$HOME\_exrc" 
    2nd user exrc file: "$VIM\_exrc" 
    system gvimrc file: "$VIM\gvimrc" 
    user gvimrc file: "$HOME\_gvimrc" 
2nd user gvimrc file: "$VIM\_gvimrc" 
    system menu file: "$VIMRUNTIME\menu.vim" 
Compilation: cl -c /W3 /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE -DFEAT_NETBEANS_INTG -DFEAT_XPM_W32 -DWINVE 
R=0x0400 -D_WIN32_WINNT=0x0400 /Fo.\ObjGOLYHTR/ /Ox /GL -DNDEBUG /Zl /MT -DFEAT_OLE -DFEAT_MBYTE_IME -DDYNAMIC_IME -DFEAT_GUI_W3 
2 -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_TCL -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"tcl83.dll\" -DDYNAMIC_TCL_VER=\"8.3\" -DFEAT_PYTH 
ON -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python27.dll\" -DFEAT_PYTHON3 -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python31.dll\" 
-DFEAT_PERL -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl512.dll\" -DFEAT_RUBY -DDYNAMIC_RUBY -DDYNAMIC_RUBY_VER=191 -DDYNAMIC_RUBY_DLL 
=\"msvcrt-ruby191.dll\" -DFEAT_BIG /Fd.\ObjGOLYHTR/ /Zi 
Linking: link /RELEASE /nologo /subsystem:windows /LTCG:STATUS oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib comdl 
g32.lib ole32.lib uuid.lib /machine:i386 /nodefaultlib gdi32.lib version.lib winspool.lib comctl32.lib advapi32.lib shell32.lib 
/machine:i386 /nodefaultlib libcmt.lib oleaut32.lib user32.lib  /nodefaultlib:python27.lib /nodefaultlib:python31.lib e:\t 
cl\lib\tclstub83.lib WSock32.lib e:\xpm\lib\libXpm.lib /PDB:gvim.pdb -debug 
Press ENTER or type command to continue 

Quando digitato e salvato con enc = utf8:

0000000: c5a1 2020 2020 c5a0 0d0a c491 2020 2020 .. ......  
0000010: c490 0d0a c48d 2020 2020 c48c 0d0a c487 ...... ...... 
0000020: 2020 2020 c486 0d0a c5be 2020 2020 c5bd  ...... .. 
0000030: 0d0a 0d0a 0d0a       ...... 

... con enc = cp1250

012.
0000000: 9a20 2020 208a 0d0a f020 2020 20d0 0d0a . .... ... 
0000010: e820 2020 20c8 0d0a e620 2020 20c6 0d0a . .... ... 
0000020: 9e20 2020 208e 0d0a 0d0a     . ..... 
+0

Quali caratteri specifici si ottengono quando si stampa/PDF? – dusan

+0

Provare ad impostare esplicitamente la codifica di stampa prima di emettere il comando ': hardcopy':': set printencoding = utf-8'. –

+0

@ib. - Non ho l'opzione 'printencoding' disponibile, a causa di + printer ma -postscript. Inoltre, ho dimenticato di menzionare, quello che sto chiedendo ha funzionato su una delle vecchie versioni di Vim (6.9, 7.0 ??) con alcune (?) Impostazioni. Ahimè, perso per me. – Rook

risposta

1

Ecco uno very nice thread discutere di qualcosa di molto vicino a questo. La conclusione alla fine è "non funziona, non farlo" - basta salvare il file in UTF-8 e stamparlo con qualcos'altro, ad es. bloc notes.

Questo funziona sul mio sistema:

:silent !notepad /pt "%" "PDFLite" 

dove PDFLite è il nome della mia stampante print-to-PDF.

Modifica: sto usando la codifica "utf-8" in vim.

+0

Non è molto confortante considerando che sono parte del mio alfabeto, e quindi spesso usati. Posso usare cp1250, e stamparlo così (funziona), ma poi mi manca la possibilità di usare tutti i "simboli cool" che utf ha:/(per non parlare del fatto che si avvita con un bel po 'di plugin che dipendono da utf8 per funzionare correttamente) – Rook

+0

Questo non risolve il problema? Si tratta di sostituire l'uso di ': hardcopy' con il comando precedente, e tutto funziona. Puoi usare UTF-8. –

+0

È solo una mezza soluzione, non solo mi induce a pensare a quale PDFPrinter ho su quale computer, ma anche a tutti i tipi di altri problemi che derivano dal fatto che utf8 non è implementato correttamente (viene in mente la colorazione della sintassi). Penso che resterò fedele alle serie di codifiche cpxxxx nell'immediato futuro per ora:/ – Rook

0

Installare paps, funziona bene tramite il comando in vim "! Paps <%> out.ps", quindi è possibile convertire utilizzando ps2pdf in pdf.

Se su un Mac, utilizzare 'brew installare Paps'

+0

Non usare ps2pdf. Prendi invece l'ultima versione di paps da github/dov/paps e che supporta l'emissione diretta di pdf. –

0

sto usando la stessa versione di Vim come il PO. Il mio incantesimo magico per stampare quella roba è:

:se fenc=cp1252 
:w 
:e ++enc=cp1252 
:se enc=cp1252 
:se fenc=cp1252 
:se penc=cp1252 
:hardcopy 

Utilizzare una tabella codici che è applicabile per voi. Le prime tre righe (ad esempio il salvataggio e il ricaricamento) potrebbero non essere necessarie, ma dovrebbe garantire che il testo sia effettivamente convertito (invece che il buffer venga semplicemente reinterpretato). AFAICT enc e penc devono essere impostati, fenc è solo CYA. Quindi utilizzare :hardcopy in qualsiasi modo.

Ricordarsi di modificare le codifiche rilevanti (enc, fenc) e salvarle nuovamente se si preferisce memorizzare il file in un'altra codepage (latin1, utf-8, ecc.). La procedura è in corso :se fenc e :w.È quindi possibile continuare con(eventualmente con aggiunto ++enc=xxx) e :se enc=xxx per verificarlo e assicurarsi di lavorare su una copia utilizzando la codepage preferita, più un altro round di :se fenc=xxx e :w quando hai finito solo per essere dalla parte della sicurezza

È tutto un po 'ridondante, ma è un modo per essere certi che Vim sia sulla stessa pagina con te. Come hai notato, c'è qualcosa di divertente nella gestione della codepage su Windows (almeno la stampa WRT), quindi non mi fido necessariamente di fare tutte le cose giuste puramente internamente. Lo impongo solo per modificare la rappresentazione del byte effettivo e quindi assicurarmi che lo stia usando.