(remove author attribution) |
|||
Line 73: | Line 73: | ||
Go to the line and do <tt>\h</tt> or <tt>\H</tt> to check it out. |
Go to the line and do <tt>\h</tt> or <tt>\H</tt> to check it out. |
||
+ | |||
+ | ==ruby version of HTMLEncode()== |
||
+ | ''Note: Vim needs to be compiled with the "ruby" feature enabled for this to work'' |
||
+ | |||
+ | The following is a simpler ruby solution to the perl version of HTMLEncode above. |
||
+ | <pre> |
||
+ | function! HTMLEncode() |
||
+ | ruby << EOF |
||
+ | @str=VIM::Buffer.current.line |
||
+ | VIM::Buffer.current.line=@str.unpack("U*").collect {|s| (s > 127 ? "&##{s};" : s.chr) }.join("") |
||
+ | EOF |
||
+ | endfunction |
||
+ | |||
+ | map <Leader>h :call HTMLEncode()<CR> |
||
+ | </pre> |
||
==Language specific HTML-entities== |
==Language specific HTML-entities== |
Revision as of 20:26, 21 March 2012
created 2005 · complexity basic · author Jos van den Oever · version 6.0
There are several ways to deal with HTML entities.
Simple search & replace
This code allows you to escape your HTML entities with one shortcut key: Change (<, >, &) to (<, >, &), or the reverse.
Note that this does not escape all characters that should be escaped, just the most common.
function HtmlEscape() silent s/&/\&/eg silent s/</\</eg silent s/>/\>/eg endfunction function HtmlUnEscape() silent s/</</eg silent s/>/>/eg silent s/&/\&/eg endfunction map <silent> <c-h> :call HtmlEscape()<CR> map <silent> <c-u> :call HtmlUnEscape()<CR>
If you add this code to your vimrc, you can escape visually-selected HTML with ctrl-h, and unescape with ctrl-u.
Automagic escaping
There's also script that does this for you automagically when you read and write files, so you can view the characters, and write the codes, or vice versa: script#909.
Originally written for Java unicodes, but there is also a setting for html codes.
The script is for &nnn style encoding, not the html entities.
perl HTML::Entities
Note: Vim needs to compiled with the "perl" feature enabled for this to work
A slightly more complex solution that escape all characters is using perl, you will need perl and HTML-Parser
function! HTMLEncode() perl << EOF use HTML::Entities; @pos = $curwin->Cursor(); $line = $curbuf->Get($pos[0]); $encvalue = encode_entities($line); $curbuf->Set($pos[0],$encvalue) EOF endfunction function! HTMLDecode() perl << EOF use HTML::Entities; @pos = $curwin->Cursor(); $line = $curbuf->Get($pos[0]); $encvalue = decode_entities($line); $curbuf->Set($pos[0],$encvalue) EOF endfunction map <Leader>h :call HTMLEncode()<CR> map <Leader>H :call HTMLDecode()<CR>
Go to the line and do \h or \H to check it out.
ruby version of HTMLEncode()
Note: Vim needs to be compiled with the "ruby" feature enabled for this to work
The following is a simpler ruby solution to the perl version of HTMLEncode above.
function! HTMLEncode() ruby << EOF @str=VIM::Buffer.current.line VIM::Buffer.current.line=@str.unpack("U*").collect {|s| (s > 127 ? "&##{s};" : s.chr) }.join("") EOF endfunction map <Leader>h :call HTMLEncode()<CR>
Language specific HTML-entities
To change e.g. the Norwegian special characters there is no need to select text and not check all the text since it is never part of code-syntax (as far as I know). With the following, pressing ",r" from normal-mode will check all the text and replace all three Norwegian special chars with entities (and can easily be applied to other languages):
" To replace all Norwegian special chars with entities. nmap <silent> ,r :call ReplaceNorChar()<CR> function! ReplaceNorChar() silent! %s/Æ/\Æ/eg silent! %s/Ø/\Ø/eg silent! %s/Å/\Å/eg silent! %s/æ/\æ/eg silent! %s/ø/\ø/eg silent! %s/å/\å/eg endfunction
Add it to your ~/.vimrc or ~/.vim/ftplugin/html.vim.
Comments
Can check it with:
.! php -r "echo htmlentities('<cword>');"
command Entities :call Entities() function Entities() silent s/À/\À/eg silent s/Á/\Á/eg silent s/Â/\Â/eg silent s/Ã/\Ã/eg silent s/Ä/\Ä/eg silent s/Å/\Å/eg silent s/Æ/\Æ/eg silent s/Ç/\Ç/eg silent s/È/\È/eg silent s/É/\É/eg silent s/Ê/\Ê/eg silent s/Ë/\Ë/eg silent s/Ì/\Ì/eg silent s/Í/\Í/eg silent s/Î/\Î/eg silent s/Ï/\Ï/eg silent s/Ð/\Ð/eg silent s/Ñ/\Ñ/eg silent s/Ò/\Ò/eg silent s/Ó/\Ó/eg silent s/Ô/\Ô/eg silent s/Õ/\Õ/eg silent s/Ö/\Ö/eg silent s/Ø/\Ø/eg silent s/Ù/\Ù/eg silent s/Ú/\Ú/eg silent s/Û/\Û/eg silent s/Ü/\Ü/eg silent s/Ý/\Ý/eg silent s/Þ/\Þ/eg silent s/ß/\ß/eg silent s/à/\à/eg silent s/á/\á/eg silent s/â/\â/eg silent s/ã/\ã/eg silent s/ä/\ä/eg silent s/å/\å/eg silent s/æ/\æ/eg silent s/ç/\ç/eg silent s/è/\è/eg silent s/é/\é/eg silent s/ê/\ê/eg silent s/ë/\ë/eg silent s/ì/\ì/eg silent s/í/\í/eg silent s/î/\î/eg silent s/ï/\ï/eg silent s/ð/\ð/eg silent s/ñ/\ñ/eg silent s/ò/\ò/eg silent s/ó/\ó/eg silent s/ô/\ô/eg silent s/õ/\õ/eg silent s/ö/\ö/eg silent s/ø/\ø/eg silent s/ù/\ù/eg silent s/ú/\ú/eg silent s/û/\û/eg silent s/ü/\ü/eg silent s/ý/\ý/eg silent s/þ/\þ/eg silent s/ÿ/\ÿ/eg endfunction
--Preceding unsigned comment added by 212.145.191.182 11:11, July 23, 2010
- I formatted the above. What was the dot doing in s./old/new/eg? Is the dot supposed to be before the s (the current line)? If so, it is redundant because the default is the current line. I removed the dot from each command. JohnBeckett 12:07, July 23, 2010 (UTC)
very well done, thank you