On Nov 10, 3:26 pm, Marcio Gil <[email protected]> wrote:
> On Nov 10, 6:09 pm, Christian Brabandt <[email protected]> wrote:
>
> > autocmd FileType dosbatch :e! ++enc=cp850
>
> works, but put the syntax highlight off
>
> On Nov 10, 6:16 pm, Tony Mechelynck <[email protected]>
> wrote:
>
> > au BufReadPre,BufNewFile *.bat,*.btm,*.sys setlocal fenc=cp850
>
> don't works.
>
> On Nov 10, 6:29 pm, Ben Fritz <[email protected]> wrote:
>
> > autocmd FileType dosbatch e ++enc=cp850
>
> Same as Christian Brabandt's: works, but put the syntax highlight off
>
>
Oops, forgot the "nested" keyword. Try:
autocmd FileType dosbatch nested e ++enc=cp850
See :help autocmd-nested
>
>
>
> > I actually have something a bit more complex (I've removed some
> > irrelevant stuff for your immediate problem, if some of this is
> > confusing as-is). I use a different method, by changing
> > 'fileencodings' prior to loading the file, so that Vim automatically
> > detects my desired fileencoding:
>
> > " Don't detect utf-8 without a BOM by default, I don't use UTF-8
> > normally
> > " and any files in latin1 will detect as UTF. Detect cp1252 rather
> > than
> > " latin1 so files are read in correctly. Fall back to latin1 if
> > system does
> > " not support cp1252 for some reason.
> > exec 'set fileencodings=ucs-bom,'.s:windows_enc.',latin1'
> > if has('autocmd')
> > augroup fenc_detect
> > au!
>
> > " batch files need to use the encoding of the cmd.exe prompt in
> > Windows
> > if has('win32') || has('win64')
> > " get the cmd.exe encoding by asking for it
> > let g:batcp = substitute(system('chcp'), '^\c\s*Active code
> > page: \(\d\+\)\s*[^[:print:]]*$', 'cp\1', '')
> > if g:batcp =~? '^cp\d\+$'
> > autocmd BufReadPre *.bat exec 'set fileencodings='.g:batcp
> > autocmd BufNewFile *.bat exec 'setlocal
> > fileencoding='.g:batcp
> > endif
> > endif
> > " restore default fileencodings after loading the files that use
> > a special
> > " value to force specific encodings
> > exec 'autocmd BufReadPost *.bat set fileencodings=ucs-
> > bom,'.s:windows_enc.',latin1'
> > augroup END
> > endif
>
> This works only for DOS batch files, other files are also opened in
> cp850.
>
> But in the Cygwin vim don't recognizes the s:windows_enc variable, I
> will substitute this for 'cp850'
>
Oops, that's an artifact of my using the same .vimrc on Unix and
Windows. I do something like this, before the code snippet:
if has('unix')
let s:windows_enc = '8bit-cp1252'
else " windows
let s:windows_enc = 'cp1252'
endif
s:windows_enc doesn't exist by default. Setting it to cp850 means ALL
files will be detected with this encoding, if they don't have a BOM.
> This works for me:
>
> exec 'autocmd BufReadPre *.bat set fileencodings=ucs-bom,cp850,latin1'
>
As Tony says, this will set ALL files to cp850, unless they have a
BOM.
The point of my script snippet was:
1. For most files, use ucs-bom to use a Unicode encoding if the file
has a BOM, then try windows-1252, but if the system doesn't recognize
windows-1252, try latin1 (I actually have more autocmds to check for
characters specific to windows-1252 and use latin1 if not present).
2. For *.bat files only, override this to ONLY try the cmd.exe
encoding
3. Restore option (1) after loading dos files, since the option is
global and the fenc is already set appropriately
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php