1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377
|
*utl_usr.txt* Plugin for executing URLs in plain text files
*utl* *utl-plugin*
For Vim version 6, Version: utl-2.0, $Revision: 1.14 $
Utl.vim User Manual
By Stefan Bittner
stb@bf-consulting.de
Contents:
1. Intro........................|utl-intro|
2. Getting started..............|utl-getstart|
3. Tutorial.....................|utl-tutorial|
4. Examples of use..............|utl-examples|
5. Tips, details, pittfalls.....|utl-tipsdetails|
7. Changes since Utl/Thlnk-1.2..|utl-changes|
8. Todo list....................|utl-todolist|
9. Credits......................|utl-credits|
See |utl_ref.txt| for some reference material.
See http://vim.sf.net/script.php?script_id=293 for installation instructions
See |utl-changes| for things that have changed in this version.
Any comments, bug reports, pachtes, fixes and suggestions are welcome, and
sometimes needed for my motivation. See |utl-todolist| if you want to
contribute to Utl.
Happy linking,
Stefan Bittner <URL:mailto:stb@bf-consulting.de>
==============================================================================
1. Intro *utl-intro*
Welcome to utl.vim!
What is Utl.vim
---------------
* It brings the benefits of URL-based hyperlinking to the realm of plain text,
extending the URL syntax for plain text needs, in accordance with the RFC 2396
URI specification.
* It's a handy utility for you right away
* It's fun :-)
surfing text files, executing text ...
What is it good for?
--------------------
* Enables Vim to be your central desktop application, for instance:
- Easily navigate in collections of related text files via hyperlinks
- Call web browser and email client on URLs (configurable protocol handlers)
- Call MS-Word on .doc files, Acrobat Reader on .pdf, Windows Explorer on
directories, IrfanView on .jpg etc. (configurable media type handlers)
- Maintain pictures from your digicam based on a text file
- Maintain a personal info file containing hotlinks
* Use it for project management, software development, report preparation and
technical writings. For instance:
- Reference emails from text files
- Reference bug tracker database from a text file
* Smart usages. For instance:
- Embed vim commands in text files and source code.
- Use it as light weight spell checker,
- or for dictionary lookups.
- Start programs using Utl.
- Use it for relative editing and
- for navigating HTML source code.
* Use it for quality commenting of source code. For instance:
- Reference related code with hot links, e.g. reference the definition of a
struct in C/C++
- Reference design papers, UML diagrams, man pages etc from source code
- Turn references like "see below" and "type zR to open the folds" into
hotlinks
Utl.vim is easy
-----------------
* You only need to know one single command to get started: \gu = Go URL
1. Type :help utl-getstart
2. Hit \gu on the live examples given there
As a reader of texts containing URLs that's all! As an author you have to
know how to write URLs. But utl.vim gives you a training. And what you
will learn is 90% general knowlegde about URLs that you can use elsewhere.
* Utl.vim is friendly:
No side effects, fits seamlessly into your Vim Session, well documented.
Want to give Utl a try? Fine, so lets just dive into the live examples:
==============================================================================
2. Getting started *utl-start*
Utl.vim's basic mapping is \gu which stands for "Go Url". That's all you need!
Note: If you have changed the mapleader string your actual mapping might also
be ,gu or _gu or whatever, see |mapleader|.
Live Examples now!!!
Position the cursor on the next line:
<URL:#r=here>
Then hit `\gu'. This should take you ...
id=here.
You just executed your first link!
`#r=abc' refers to a position in the document, that looks like `id=abc'. (If
you know HTML: that's analogues to a <A HREF="#abc"> which refers to
ID="abc".) The `r' in the expression stands for `reference'.
Hitting `\gu' on <URL:#tn=some text> takes you to ... some text.
The special syntax `tn=' just means that the target of the link is defined by
searching the denoted string (some text) in forward direction (tn stands for
Text Next). You can leave away the `tn=' prefix and just write <URL:#some
text> because the tn= is the default prefix.
Hitting `\gu' on <URL:utl_ref.txt> takes you to the file utl_ref.txt.
Please come back here again after having executed the link!
Hitting `\gu' on <URL:utl_ref.txt#tn=^thanks for> takes you to a specific
position in the file utl_ref.txt. This example can be seen as the combination
of the two previous examples: URL + #xxx
The #xxx suffix is called a fragment expression in URL lingo.
Hitting `\gu' on <URL:http://www.vim.org> will invoke your web browser with
that URL. Just try it, Utl will assist you to set up your favorite browser.
You can leave away the <URL:...> embedding. Try for example:
http://www.vim.org
or even +------- This is also a link which you should execute :-)
|
www.vim.org [#r=foot1]
An advantage of embeddingless links is that normally you will find URLs in
given documents in this form. Also, some people find the <URL:...> embedding
too clunky. The disadvantage is that there is no safe parsing for "naked" URLs
and as one consequence of this, no syntax highlighting.
You can also type an URL in the command line:
:Gu utl_ref.txt # Edit file in same directory as current file
:Gu www.google.com # Start web browser from within vim. Sometimes
# faster than from desktop :-)
If you feel it's now time for a "hello world" test, just go ahead and write
your own links. There is no meta data and no tags file needed. Its nothing
but plain text.
Before you seriously start using utl.vim it is recommended to continue with
reading the next chapter, 3, Tutorial. If you are in doubt if Utl valuable for
you, have a look at chapter 5, Examples of use, |utl-examples| first.
==============================================================================
3. Tutorial *utl-tutorial*
3.1 Forth and back *utl-tutforthback*
From the previous chapter you already know how to follow links by hitting \gu
when a link is under the cursor.
The following link, as you know, takes you to another file:
<URL:utl_ref.txt>
Try this now! ... No, Wait! To come back here again, just use the regular
vim command CTRL-O. That's the BACK-Button in the "Vim browser" - and it might
need to be typed more than once.
Now do it!
Hope you are back again.
3.2 Relative and absolute URLs *utl-tutrelabs*
The following URLs are all equivalent:
<URL:utl_ref.txt>
<URL:./utl_ref.txt>
<URL:../doc/utl_ref.txt>
These are all _relative_ URLs. This means that the path given in the URL is
relative to the path of the document containing the URL. Note that this is
different to Vim's :e command where file names are relative to the current
working directory (see |:pwd|). Whenever possible you should use relative
URLs. But sometimes you need _absolute_ URLs, just as you sometimes need
absolute path names with Vim's :e command. Here is an absolute URL[#r=foot3]:
<url:file:///home/stb/.vim/doc/utl_ref.txt>
An absolute URL _always_ has a so called scheme (also called protocol) in
front, e.g. file: , http:, mailto: . (And, if there is a protocol in front it
always is an absolute URL.) What also makes sense is to write the above URL
without the protocol:
<url:/home/stb/.vim/doc/utl_ref.txt> # equivalent to above
This is a relative URL (because there is no protocol) ... containing an
absolute path. The contrary does not make sense: An absolute URL with a
relative path:
<url:file:./utl_ref.txt> # WRONG!!! Absolute URL with relative path
# makes an invalid URL.
Under Windows you can specify drive letters like this:
<url:file://d:/path/to/foo.txt> or, which is the same,
<url://d:/path/to/foo.txt>
This is in conformance with URL specifications. Note that you always should use
forward slashes, no matter on what OS you are; URLs are universal and are
independent of the OS.
3.3 Fragments *utl-tutfrags*
Now lets add fragments to the URL.
The next link again references the same file as in the above examples, but is
extended by a fragment expression. That way a specific position in the target
file can be jumped to. Try to execute the link:
<URL:utl_ref.txt#tn=thanks for>
and come back again with CTRL-O. The next link specifies the same file, but
the fragment expression is different:
<URL:utl_ref.txt#r=foot1>
Execute it and come back again! It took you to about the same position as the
previous link, but by other means. The fragment `#r=foot1' means, that the
file utl_ref.txt is searched for the ID reference `foot1'. What follows r=
should be a simple string (an identifier to be exact).
The #tn fragment has one big advantage over #r= fragments. It allows to
refer to specific positions in the target document without the need to
modify that target document, either because you don't want it or because you
don't have write access. The advantage of the ID reference fragment is that
the link is more robust.
#tn= and #r= are the most important fragment specifiers in utl.vim. As
already said, the #tn= prefix is the default prefix, i.e. you can leave it
away. Thus the link above ( #tp=thanks ) will normally be written shorter:
<URL:utl_ref.txt#thanks for>
This is also called a naked fragment identifier because there is no `key='
prefix.
Here is an overview of the available fragment expressions:
#tn=text Same as #text
#tp=text Stand for `t'ext `p'revious, i.e. define position by
searching first occurance of `text' in backward direction.
#line=123 Position defined by line number. Most useful for documents
which won't change
#r=identifier Position defined by the id `identifier'
See |utl-fragexpr| for some explanation.
3.4 Other media types *utl-tutmtypes*
URLs are not restricted to .txt files or web pages. You can, for instance,
reference a MS-Word document:
<url:foo.doc>
To make this work you have to define a handler for .doc type files. Utl tries
to make this a painless as possible through a smart setup facility. Go and
execute the above link to see how this works. In URL and Utl terms a .doc type
file is said to be of media type "application/msword". You can define a
handler for any media type you like. See the explanations under
<URL:config:#r=mediaTypeHandlers>. Here is a list of other typical media
types for which you might want to set up handlers:
<url:foo.pdf> # PDF documents
<url:foo.rtf> # Rich text format documents (emails)
<url:foo.ppt> # Powerpoint documents
<url:foo.xls> # Excel sheets
<url:img_0108.jpg> # All kinds of images
<url:path/to/some/directory>
# Call Vim explorer, Windows explorer, shell etc. on
# directory
3.5 Typing an URL *utl-tuttypeurl*
In a web browser there are two ways to go to a page:
1. You follow a hyperlink from the page you are in.
2. You type an URL yourself.
Possibility 1 corresponds to \gu in utl.vim. Possibility 2 corresponds to an
utl.vim command :Gu
:Gu utl_ref.txt
You can use the :Gu command for editing another file which is in the same
directory as the current file. Example:
gvim /really/an/annoying/long/path/to/src/main.c
:Gu option.c
I myself use :Gu for a lot for this purpose.
3.6 Other commands to execute a link *utl-tutothercmds*
-----
Normal mode commands
Until now we have used \gu to execute a link. That's the most important one.
Utl.vim defines several other command. \gu corresponds to Vim's :edit. The
other commands correspond to :view :sview etc. For example, the command \gE
opens the URL under the cursor in a separate Vim window. Position the
cursor on the following line and hit \gE to try this:
<URL:utl_ref.txt>
See |utl-commands| for the list of mappings and commands.
-----
Visual-commands
There are also visual commands |utl-gourlvis|. But you will rarely need this.
An example might be: `(see www.vim.org)', i.e. an URL without embedding which
is surrounded by characters which confuse Utl's URL parsing (the ')' in this
case. Highlight the URL (see |visual-use| if you don't know how) and execute
\gu then.
3.6 Supported schemes *utl-tutsuppscms*
Currently utl.vim supports the following protocols:
file: # Protocol for accessing local files.
# If machine is given works like `ftp:'
ftp: # Delegates to http, assuming that the browser handles this.
http: # Delegates call to your web browser
https: # Delegates call to your web browser
mailto: # Delegates call to your mail client
man: # Unix Man Pages scheme (see |utl-usesourcecode| for usage)
scp: # If you have a scp command
vimscript: # Vim specific. A scheme for executing vim commands. See
# |utl-exvs| for usage.
vimhelp: # Vim specific. About the same as vimscript:help. See
# |utl-exvimhelp| for usage.
config: # Protocol for accessing Utl's setup file
You can easily implement your own schemes or define new ones. You just define
a Vim function somewhere. Utl.vim dynamically calls those functions. Have a
look at <URL:../plugin/utl_scm.vim#r=implscmfunc>. I recommend that you read
chapter 5, Tips, details, pitfalls, before you write your own scheme handler.
3.7 Miscellaneous *utl-tutmisc*
-----
Creating files using Utl
If you execute an URL which points to a non existing file, this file (more
exact: its Vim buffer) will be created. This is very useful when authoring:
You write the URL in your document and then execute it. You can try this with
the URL <URL:utl_foobar.txt>. People told me that this feature is useful for
WIKI editing.
-----
Multiline URLs
You can spread URLs across several lines like this: <URL:../plu
gin/utl_uri.vim>. This is sometimes useful for long URL, see examples
below at #r=lu. When typing an URL and Vim breaks it (beacuse it contains a
space and Vim's 'tw' option set) you have to be careful: Utl eliminates all
spaces around the line break. The above link is thus equivalent to <URL:../plu
gin/utl_uri.vim>. In order to preserve the space, you could escape it with
%20 (see |utl-uri-forbchars| about escaping), e.g. <url:this filename
%20contains blanks.txt>. But you could also just split at another position:
<url:this filenam
e contains blanks.txt>
-----
Tilde support
You can use the ~ (tilde) character in URLs. Example: <URL:~/.vim/plugin/utl.
vim>. The ~ is replaced by the contents of the $HOME environment variable.
On Unix system ~user also works. See |$HOME|.
==============================================================================
4. Examples of use *utl-examples*
Here comes a rich collection of Utl examples, usage patterns and smart little
examples. If you go another example it would be nice you mail it to me.
4.1 Use Vim as your central desktop application *utl-usedesktop*
4.1.1 Index File *utl-useindex*
One usage is to maintain one or more text files which serve as an index or as
a central point of references. Basically like this:
---index.txt-----------------------{
<url:./foo/bar.txt>
<url:../docs/foo2.doc>
<url:../../quote/times.xls>
---}
Many people like to load such a file as buffer #1 when starting up Vim and
then browse from there. Well, I do not use Utl for this, I rather work with a
self written tags file for this purpose or with a session file (see
vimhelp:mks) where a file always pertains to the same buffer number.
4.1.2 Project Management
Here is a real example. The following is the root file for a software project
where the task is technical subproject management. The # comments are only for
explanation and not in the original file. It looks something like this:
--- poland_project.txt ------------{
file: poland_project.txt - Poland Install project
hist: 13.07.04/Stb
References
----------
# Link to architecture working document
<url:../i/rcinstall_arch.txt>
# Link to installation instructions
<url:../../data/PL Installation Procedure - IMS Installation.doc>
<url:cr.txt> # Link to my change requests notes
<url:vers.txt> # Link to SCM related stuff
<url:t.txt> # Link to test reports
<url:t.txt#r=act> # ... direct link to current test there
# Link to root in document management system
<url:http://kstbx032.ww010.siemens.net/livelink/livelink.exe?func=ll&
objId=1007014&objAction=browse&sort=name> (id=lu)
Iinstall: # Link to a specific document there
<url:http://kstbx032.ww010.siemens.net/livelink/livelink.exe/RC_D_
INSTALLATION_COMPONENT_IF_SPEC.doc?func=doc.Fetch&nodeId=1017472&
docTitle=RC_D_INSTALLATION_COMPONENT_IF_SPEC%2Edoc&vernum=1>
# Hot link to the current installation CD
<url://q:/projekt_511/infrastructure/installation/polen/polen-cd>
.
.
Correspondance # Threads of project specific correspondance
--------------
.
. # id=emailex
<url:corr/20041219_RE FormXtra 2.6 question.rtf> # Reference to a RTF email
<url:corr/20041220_RE FormXtra 2.6 question.txt> # Reference to a .txt email
<url:corr/20041221_RE FormXtra 2.6 question.htm> # Reference to a HTML email
.
.
-----------------------------------}
The referenced files also contain links. I guess I do not have even one
selfwritten file which does not contain URLs.
4.1.3 Personal Info File *utl-useinfofile*
Quite many people maintain something like a personal info file (I also do).
They note there for example:
- Installation of tools they use on the job
- Usage of tools they use, for instance CVS usage and commands
- Links to network drives, resources and documentation
- Web links (instead or additional to bookmarks/favorites in web browser)
This file is much more useful if enriched with URLs!
4.1.5 Other usages
-----
Address book *utl-useaddressbook*
I maintain all my contacts in a Vim written XML file. A Perl program parses
this file and generates a Vim tags file. This tag file serves as the database
for quick lookup of phone numbers, emails and addresses (contact me if you
would like to try this). I use URLs in this file:
- to add references to contacts. Like order information, and emails
- to execute email addresses (which normally are part of the contact
information)
- to execute web pages related to the contact
- link between addresses
- link to encrypted login and passwords
- ...
-----
Link Source Code Files *utl-usesourcecode*
This is an Utl usage of big potential in my opinion. But as Utl is currently
only implemented for the Vim Editor (not for Emacs etc) this usage might be of
real benefit only for people who have an own interest in quality source code.
You can use Utl to:
- link between the source code files using fragment addressing. For
instance point to a C/C++ header file where a structure/class is defined.
- link from a source code file to Man pages using the man: scheme (Unix only).
See #r=foot5 for an example
- link from a source code file to design documents, illustration pictures
etc
The Utl source code uses URLs itself, see for instance: <URL:../plugin/utl.vim
#URL:vimhelp:cmdline-special>).
-----
Further usages
- Is useful for technical writers.
Compile changes and references for a (MS-Word) document in a text file
containing URLs
- Make a photo index file.
Reference you photos from within text files which contain links to your
pictures plus annotation text for the photos.
- Bug Tracker database.
Maintain a text file which has bug tracker IDs (or change requests more
generally) as entries:
CR001 Error 8 from replace_client_c.bat
date: 27.02.2005
status: implemented
text describing the problem...
text analyzing the problem...
...including links to requirements documents, links to to emails
concerning the problem, e.g. <URL:corr/Re FormXtra 2.6 question.htm>,
cross references to other CR's
CR002 ...
I maintain such a file for Utl development for instance. The Change Request
IDs I choose freely. On my job I also use such files, but the IDs are given
by the Bug Tracker database which we use there. Normally everything should
go into the bug tracker itself (says the upper management) but reality is
different. The Bug Tracker IDs have the form `BT12345' and I can execute
them as an UTL hotlink (see <URL:../plugin/utl.vim#r=heur_example>). Very
convenient.
4.2 Smart examples *utl-smartexamples*
-----
Spell Checker *utl-spellchecker*
You can use Utl's web browser integration for spell checking of words. With
the following in your .vimrc file:
nmap ,l :exe "Gu http://dict.leo.org/?search=" . expand("<cword>")
you can lookup the word under the cursor in a web dictionary with the command
,l . I use this quite often and this is my lightweight spell checking tool
(especially when I have to write english text).
-----
Dictionary Lookup *utl-dictlookup*
The above mapping above is also useful as dictionary lookup translation
english into german or vice versa. You can also make a similar mapping:
" Lookup of expression given on command line.
" Of benefit because often faster than click click on desktop
" Use %20 or \ or + to escape blanks, example:
" for%20that%matter
" for\ that\ matter
" for+that+matter
nmap ,m :Gu http://dict.leo.org/?search=
In this form you type the word to lookup in the command line.
-----
Gu with dot dir *utl-gudotdir*
The following command is short but very useful:
:Gu .
invokes the file browser for the directory where the current file resides. The
file browser will typically be either Vim's file browser or Windows Explorer
(or Konqueror on Linux), depending on how you configured the directory
handler, see Config:#r=mt_dir. Both handlers are of benefit, depending on
what you want to do. If the Vim file explorer is configured, the following is
especially useful:
:Gu .
c
i.e. you execute the command 'c' in the Vim file explorer to change the
current working directory ( see vimhelp:current-directory ) accordingly. This
enables you to use file name completion to edit files which are in the same
directory as the previously edited file.
-----
Invoke Utl's media type handlers in file browser *utl-fbcallmt*
If you are in Vim's file browser you can use \gu to invoke the files and
directories presented there with the Utl-defined media type handlers! For
example open a MS Word document with MS Word, open a picture with irfanview,
open a directory with Windows Explorer (if directory handler configured to
Windows Explorer) etc. That's very convenient. Seems like magic first, but
isn't, is completely straight forward and no special treatment by the utl.vim
plugin (utl.vim is just lucky on one point: concerning directories, that they
are presented with forward slashes even under Windows). It might be worth to
note that you do not execute self written URLs here.
-----
Starting a program *utl-startprog*
The following starts a vncviewer client for me:
<url://q:/projekt_511/Iberl/vnc3.3.3R2/vnc_x86_win32/vncviewer/vncviewer.exe?>
The question mark at the end denotes that the path in front of it should be
interpreted as a program to be executed. This is straight forward URL
techniques, Utl applies the general URL query concept to programs which are
directly accessible by your file system. See |utl-filequery| for some specs.
You can also supply the server IP address to connect to:
<url://q:/projekt_511/Iberl/vnc3.3.3R2/vnc_x86_win32/vncviewer/vncviewer.exe?89.11.11.242>
Or you only link to the directory in order to start the program from
there[#r=foot2].
<url://q:/projekt_511/Iberl/vnc3.3.3R2/vnc_x86_win32/vncviewer>
Starting programs is especially useful in case of long, strange paths to the
program which you either forget or which is simply to ennoying to type. This
can be an alternative to one liner programs. A good place to keep such links
might be your info file, see |utl-useinfofile|.
Here is another example using a slightly different form of query:
<url:my-decrypt.pl?stb-cellphone-pin%3e>
This link is contained in my address book. It looks up the PIN number of my
cellphone which is GPG encrypted. My-decrypt is a small Perl program which
asks for the password and then writes the PIN to standard output. The %3e at
the end is the '>' character in escaped form (see |utl-uri-forbchars|). The
'>' as the last character means the following to Utl: Execute the given
program synchronously and write the output into a temporary file. The
temporary file is then displayed in Vim. In the above vncviewer example the
program is started asynchronously and no output is awaited.
-----
The vimscript scheme *utl-exvs*
The vimscript scheme is a nice example for a non standard protocol. Utl.vim
introduces it in the hope it will be helpful and also as a demonstration for
the URL concept. This URL definition is in full compliance to the URL/URI
specification! Try the folowing examples:
<URL:vimscript:ls>
1. <URL:vimscript:let g:utl_sav=g:colors_name>
2. <URL:vimscript:colors peachpuff>
3. <URL:vimscript:exe "colors ".g:utl_sav>
<URL:vimscript:help uganda>
Here is an example which is derived from the minibufexpl.vim ( see
http://www.vim.org/scripts/script.php?script_id=159 ). This file
contains folds and the following hint:
Hint: Type zR if you don't know how to use folds
Using UTL this could be turned into a hotlink:
Hint: Execute <URL:vimscript:normal zR> if you don't know how to use folds
Execute the above URL to see how this works...and to see another example :-)
Yet another vimscript example {{{
This example is derived from the vimspell.vim, see <URL:http://www.vim.org/
scripts/script.php?script_id=465>. This file contains the following:
" Section: Documentation
"----------------------------
"
" Documentation should be available by ":help vimspell" command, once the
" script has been copied in your .vim/plugin directory.
"
" You still can read the documentation at the end of this file. Locate it by
" searching the "vimspell-contents" string (and set ft=help to have
" appropriate syntaxic coloration).
Using UTL this can be turned into a hotlinked version:
" Section: Documentation
"----------------------------
"
" Documentation should be available by <url:vimhelp:vimspell> command, once the
" script has been copied in your .vim/plugin directory.
"
" You still can read the documentation at the end of this file, see
" <url:#vimspell-contents> (and execute <URL:vimscript:set ft=help> to have
" appropriate syntaxic coloration).
}}} Execute <URL:vimscript:normal zM> to close the fold again
Regarding the above examples you might agree with me that the possibility to
embed vim commands and hotlinks in a document is nice and smart.
Obviously there is one issue: As long as plain text URLs are not standard, the
standard user who reads the above given samples in minibufexpl.vim or
vimspell.vim would not be able to actually execute the URLs. But the plugin
authors could utilize the URL version anyway since their meaning is obvious to
the user. The user can execute still manually.
Potentially vimscript URLs could also be of benefit for a community, for
instance in the vim@vim.org mailing list where often vim commands are
exchanged. Can be used at hot links for those people who can directly switch
to vim while reading mail.
A historical note:
The vimscript URL was inspired by the javascript scheme, which is supported by
Mozilla/Firefox and MS Internet Explorer for example (try
<URL:javascript:window.alert(%27hello, worldddd%27)> for a javascript
example). Consider the current vimscript protocol support ( which is actually
one line of code, see ../plugin/utl_scm.vim#r=vimscript ) as a demo. Much more
sophisticated things could be achieved.
-----
The vimhelp scheme *utl-exvimhelp*
Linking to the Vim Help is especially useful. So Utl provides a a shorter form
for that. Instead <URL:vimscript:help design-documented> you can write:
<URL:vimhelp:design-documented>
using the special non standard protocol vimhelp. Obviously this is the same as
the Vim-help reference notation |design-documented|. But with the advantage
that the URL version also works if the file containing the link is not part of
the Vim help! Another advantage is that you can use fragments in conjunction
with vimhelp:
<URL:vimhelp:design-documented#line=4>.
That's 4 lines downwards from the position which the URL without the fragment
yields. (Not 4 lines downwards from the top of the file which contains that
help item.) This is useful for instance for documenting Vim scripts! See
<URL:../plugin/utl.vim#vimhelp:expr-==> for an example. It could also be useful
in the Vim mailing list when Utl.vim or plain text URLs become common enough.
-----
Mailto URLs
Utl supports the mailto: protocol. Try for example to execute the following
Links with \gu :
<URL:mailto:stb@bf-consulting.de> # with embedding
mailto:stb@bf-consulting.de # without embedding
stb@bf-consulting.de # without embedding and mailto:
Especially the latter form is useful for directly using email addresses. I
keep my email addresses in my text based address book and often start writing
emails from there. I do not maintain the address book of my mail client
program.
If your mail client supports extended mailto syntax according to RFC2368 you
can also execute URLs like
<URL:mailto:stb@bf-consulting.de?Subject=mysubject&
Cc=bf@bf-consulting.de&
Bcc=stb2@t-email.de&>
You might want use something like:
<URL:mailto:stb@bf-consulting.de?
To=hans.mueller@web.de&To=martin.schmidt@t-online.de&To=otto.andres@web.de>
to directly mail to a group of people.
-----
Using a hot key
Most people prefer to have a hot key to execute \gu. For instance you could
use the function key F4 to execute an URL with the mapping:
:nmap <F4> <Leader>gu
Or do you prefer the "real link" feeling and execute a hyperlink with double
click left mouse button?
:nmap <2-LeftMouse> <Leader>gu
id=vsex
Execute <URL:vimscript:nmap %3c2-LeftMouse%3e %3cLeader%3egu> to try this
mapping. Execute <URL:vimscript:nunmap %3c2-LeftMouse%3e> to unmap it again.
4.3 Referencing Emails
Referencing emails from within a text file can be very useful (see for
example #r=emailex above). There is not yet a proper Utl solution, but some
people (including me) find already useful what is currently possible.
-----
The desired solution?
The desired solution, in my opinion, would be to have a specific scheme for
referencing emails which reside in one of your mail folders, something like
this:
<url:mbox:[filter expression to select one or more specific email]>
for instance:
<url:mbox:subject=abc> # Display the thread related to subject abc
<url:mbox:date=20.12.2004+12:21> # Specify a mail by date+time
<url:mbox:id=20001025234042.A29199@smith.com>
# Specify a mail by its message ID
The latter would probably be the most important case: to identify an email by
its unique message ID (RFC 822 header field "Message-ID:"). Unfortunately not
every mail system supports the message ID, most notably Outlook consortes. For
Outlook, even worse, until now I did not find any possibility to savely
identify an email in a way which can be used for automated lookup. I tried for
example to write a Windows Scripting Host (WSH) script, but it seems you
cannot even identify an email by date/time received because you can only
define filters for time ranges. Who can help here??? Perhaps can be solved
using VBS.
-----
Experimental solution for mbox formatted mail boxes:
For the mbox style mail box format with the Message-ID: header field present
in the emails I work with the following experimental to handle my private
emails. It uses a query URL like this:
<url:file:///home/stb/Mail/search?20001025234042.A29199@smith.com>
It searches some mail folders for the email with the given Message-Id,
extracts it, and displays it in a Vim window. The program `search' is little
self written perl script (the Vim plugin <URL:http://www.vim.org/scripts/
script.php?script_id=25> performs a similar task.) Using existing
programming interfaces to access mail boxes would probably be a smarter
approach.
-----
Referring to copies
Here comes what I am doing over and over with my Outlook emails on the job. I
save important emails with "Save as" in a project specific "correspondance"
folder. Mostly in .rtf or .txt format. For the file name I prefix the date of
the email, for instance '20041204 RE MDAC 2.6 installation problem.txt'. The
link containing this reference looks something like:
<url:corr/20041220 RE MDAC 2.6 installation problem.rtf>
The link appears for example in the bug tracker data base. Or in a text file
which contains items for the next revision of a technical documentation.
Compilation of requirements of a software engineering project is another
example.
Depite the annoying step of saving the email to a file (could probably be
automated if I was a WSH or VBS programmer) this procedure proved to be very
powerful during the last years.
>
==============================================================================
5. Tips, details, pitfalls *utl-tipsdetails*
5.1 Associated Base URL and Cache Mapping *utl-tdassbcachem*
-----
Associated Base URL *utl-tdassb*
Execute the link:
<URL:utl_ref.txt>
and when you ARE in the other file, utl_ref.txt, then type the utl.vim
command:
\gs
that shows you the associated base URL in Vim's message line.
It looks something like:
URL=file:///path/to/.vim/doc/utl_ref.txt
This is the base URL, denoting the context for resolving relative URLs.
If \gs shows you a message which starts with `no associated URL', this means
that the buffer was not invoked by utl.vim, e.g. was invoked by a user
command like :e xyz.
You normally do not need the \gs command. But it is sometimes useful to figure
out what's going on.
-----
The `file:' protocol is the default *utl-tdfileisdef*
When \gs shows `URL= ' (empty value) you nevertheless can execute relative
URLs. Given a relative URL, say utl_ref.txt, utl.vim just assumes the
`file:' protocol, i.e. file:///path/to/currentBuffer.
This behaviour normally gets the thing started: you are in a normal Vim
session and encounter a link somewhere. Just type \gu to follow the link.
This behaviour to "urlify" the current resource is usual for systems that
support both, URL oriented and file system oriented resources. For example
Linux/KDE's web and file browser konqueror. For the konqueror the http:
protocol is the default.
-----
Cache Mapping *utl-tdcachemap*
Type now the utl.vim command:
\gc
Utl.vim shows you it's internal cache-mapping: The mapping between local
files and their URL. That grows up more and more when you continue to
follow links to different URLs. At the moment \gc, like the \gs command, is
mainly useful to see whats going on when learning utl.vim. The cache map is
always looked up first when utl.vim needs a base URL. URLs that are passed
directly to the web browser or to the mail client are an exception. They are
passed to these applications before lookup and will not be visible in the
cache map.
When working with local files, the URL may seem quite academic. But with
remote resources this changes[#r=foot4].
5.2 Writing correct URLs *utl-tdwriteurls*
As already mentioned, understanding URLs is essential for using utl.vim as
an _author_. Using utl.vim for the _reader_ who only executes URLs requires
not much understanding; you just hit \gu when you encounter a link. That's a
difference between authoring/editing/writing on one side and
reading/browsing/viewing on the other side.
Have you already read the URI primer |utl-uriprim|? Strongly recommended!
OK, enough moralizing. Here are some rules and hints:
- Always use forward slashes! *utl-usefwslashes*
Even on MS Windows do not write:
<url:file:D:\htdocs\corephp\kalender\WebCalendar\index.php> # bad!!!
Instead write:
<url:file://D:/htdocs/corephp/kalender/WebCalendar/index.php> # good!
Note that the windows drive appears where you normally expect a machine
name. That is according to URI specifications. Try it out from within your
web browser if you do not believe it!
*utl-userels*
- Use relative URLs instead of absolute URLs whenever possible. For example,
use:
<url:sub_dir/foo.txt> or
<url:./sub_dir/foo.txt> # same as previous line
instead of:
<URL:file:/full/path/to/sub_dir/foo.txt>
Other example with file which is in a directory with is parallel to the
directory where the current file is in:
<URL:../sibbling_dir/foo.txt>
Normally there is no need for an explicit `file:' protocol!
- How relative URLs are combined *utl-howrelscombine*
Say you have a file foo.txt which lives in the directory /full/path/to .
Thus the full pathname of foo.txt is:
/full/path/to/foo.txt
Further assume foo.txt contains an URL:
[foo.txt]
.
.
<URL:sub_dir/bar.txt>
.
.
EOF
When this URL is executed by utl.vim, the following happens:
- The URL "sub_dir/bar.txt" is recognized as a relative URL (because it does
not contain a protocol).
- Every relative URL has to be transformed into an absolute URL. This is
achieved by combining it with the base URL. The base URL is the URL of the
containing document minus its file name. In our case:
"file:///full/path/to/"
(When foo.txt itself was retrieved through, say, the scp: protocol,
then the base URL might read something like "scp://host.de/.../".
Utl.vim's \gs command shows you the absolute URL of the current
document.
absolute URL of file
containing the URL: file:///full/path/to/foo.txt
- file component: foo.txt
--------------------------------------------------------------------
= base URL: file:///full/path/to/
+ relative URL: sub_dir/bar.txt
--------------------------------------------------------------------
= absolute URL: file:///full/path/to/sub_dir/bar.txt
It's always an absolute URL which is executed by utl.vim. Relative
URLs are never executed directly! They are transformed into absolute
URLs in order to get executed.
5.3 Common Pitfalls *utl-commonpitfalls*
-----
Absolute URLs do not combine!!!!!! *utl-absdontcombine*
The following makes no sense:
<URL:file:../do/not/do/this> # VERY BAD
Here is the easy rule to keep in mind: When the protocol -- `file:' in our
case -- is present, then it's an absolute URL! If it is absent, then it is a
relative URL. Be aware of this rule... although bad URLs as the above one
might seduce you :-)
An absolute URL is taken as it is! The ../ in the example suggests a
relative path. But since the URL is absolute, the path will _not_ be
combined with the path of the document containing that URL. Executing this
link is about the same as when you type the Vim command:
:edit ../do/not/do/this
That means: the result depends on the current directory, not on
the directory of the file containing the URL. Not what you want!
The moral of the story is:
1. When you use a protocol like file: or http: in your URL, then you have
to give the complete path in the URL!
2. Use relative URLs whenever possible!
-----
Protocol and file type are different things *utl-protvsftype*
This is something which is important to understand, especially if you are
going to extend Utl by your owne protocol and media type handlers.
Linking to a HTML file does not mean that you necessarily need the http:
protocol then! Protocol and file type (= media type) of the link target are
completely independent.
You can have http: to retrieve a txt file:
<URL:http://www.ietf.org/rfc/rfc2396.txt>
Or you can have file: to retrieve a (normally, but not necessarily local) HTML
file:
<URL:file:///usr/local/apache/htdocs/index.html>
This second example is more important for normal utl.vim usage: for
example, when using utl.vim for editing your website. Utl.vim can
directly execute links in HTML files and it normally does that by implicitly
using the `file:' protocol. See also |utl-footnote-htmledit| and
|utl-tutmeddep|.
*utl-tdmeddep*
5.4 Embedding and fragment interpretation depend on the media-type
As you already know, Utl introduces the embedding `<URL:myUrl>' for plain
text files. For HTML files (.html or .htm), it makes sense to support HTML's
embedding, i.e. something like `<A HREF="myUrl">'. This means that when you
are editing a HTML file and execute \gu to follow a link, utl.vim expects the
pattern `<A HREF...>' under the cursor.
The URL embedding syntax relates to the media type of the source of the link.
The fragment expression syntax relates to the media type of the target of the
link. The semantics of the fragment expression depends on the media-type.
When the target is a HTML file, with an IdRef expression like `#myFrag' then
Utl finds the position `<A NAME="myFrag">' (it will not parse the HTML file
though, merely search it; but in practice it functions as expected). When
the target is any other file type (utl.vim only distinguishes HTML from all
others) then Utl finds the position of `id=myFrag' (case never matters).
So you can really use Utl as a HTML-Source-Browser! That's useful
especially for editing and browsing your "under construction" web site.
The other fragment expressions like line=, tn= do not depend on the file
type (= media-type) in utl.vim.
==============================================================================
6. Setup and Customization *utl-customization*
Setup of web browser, mail client, media type handlers etc is triggered
dynamically by Utl.vim when first requested. All settings are in the file
<URL:../plugin/utl_rc.vim>. Refer to the explanations in the header of this
file. The design goal was to make getting started with Utl easy.
Besides these setup items there is one pure customization item. You can switch
off Utl's syntax highlighting of URL with the following setting in your vimrc
file:
let g:utl_config_highl = 'off'
" values: 'on', 'off'. Variable undefined is the same as 'on'
==============================================================================
7. Changes from Utl-1.2 (Thlnk-1.2) *utl-changes*
-----
Incompatible Changes *utl-chgincompat*
- #tn= fragment is now default, i.e. #tn=foo is same as #foo
Previously the ID-reference fragment #r=foo was the default. If you have
used the naked fragment with the previous version you might want to convert
your links. Use the search pattern /<URL:.*#[^=>]*> to find the links
which need to be converted (the pattern works within Vim as well as with the
grep program) and change # --into--> #r= . If I receive more than five
complains I will supply a converting utility :-)
The reason for this change was that #tn= semantics is used more often by
most users.
-----
Changed *utl-chgchanged*
- Create documents on non existent local URLs (Wiki support).
No longer complain. Perhaps this should be customizable. For a set of
read-only documents complaining mighgt be better.
- On http URLs no longer use the wget utility for retrieving files on the web.
Instead delegate to your web browser.
-----
Added *utl-chgadded*
- Call web browser on http URLs and email client on mailto URLs (configurable
scheme handlers)
- Call MS-Word on .doc files, Acrobat Reader on .pdf, IrfanView on .jpg etc.
(configurable media type handlers)
- Syntax highlighting for URLs (can be switched off)
- Support URL heuristics, e.g. allow www.vim.org, not only http://www.vim.org
- Support exeuction of URLs without <URL:...> embedding (e.g. execute URLs as they
mostly appear in not specifically written text like "see www.vim.org for Vim plugin"
- Support multiline URLs
- Smart setup and customization facility
- Tilde Support, e.g. allow <URL:~/foo/bar> and <URL:~user/foo/bar>
- Automatically open file in split window if current buffer cannot be
abandonned (e.g. is not written)
-----
Fixed *utl-fixed*
- Yes, about 10 bugs... but probably more new bugs came in :-)
==============================================================================
8. Todo list *utl-todo*
-----
Todo list
Please let me know which feature you would like to see in the next release.
- Support for URL creation (authoring support)
See #foot6 for an approach.
- Dynamic call of handlers.
There should be a possibility to choose media type and scheme handlers
dynamically. This is most useful perhaps for links to local directories,
i.e. URLs like <URL:../doc>: one time you want to call Vim's own file
explorer, one time the file explorer of the system (e.g. Windows Explorer),
one time the shell (or DOS box on Windows) with proper cwd. Currently you
have to always invoke the setup <URL:config:#r=mt_dir> and change it.
- Allow wget to retrieve http documents.
There should be a possibility to handle http URLs in Vim (using the wget
utility) as version 1.2 offered it. Currently http URLs are always delegated
to an external program (normally your web browser). The issue probably
depends on the previous one.
- Make colors of URL syntax highlighting configurable.
- Check for dangling links
There should be a function to check whether all links points to existing
targets. Actually I already have a hack solution. Please email if you think
this would be a nice feature.
- Follow links when searching.
Add a function which searches the file tree which is defined by a file
containing file URLs.
-----
Known bugs *utl-knownbugs*
- The mappings \gE, \gV which split the screen when executing an URL
are not respected for a reference to the same document; e.g. executing
\gV on <URL:#tn=this> doesn't split the screen. The same is true
when the file is the current file: e.g. <URL:utl_usr.txt#tn=this>.
- Highlighting Bug
The syntax highlighting gets confused in case of a split window, both
containing the same file with URLs. Perhaps a Vim bug.
==============================================================================
9. Credits *utl-credits*
Wolfgang Fleig, my partner for his for his help, co-authoring, dialectical
antithesis and sponsoring.
Ines Paegert
for her impulses.
Bram Moolenaar <Bram at moolenaar.net>
for the Vim editor.
Barrie Stott <G.B.Stott at bolton.ac.uk>
for helping a lot with the documentation
REKellyIV <Feral at FireTop.Com>
Klaus Horsten <horsten at gmx.at>.
Patrik Nyman <patrik.nyman at orient.su.se>
Engelhard He <Engelhard.Hess at artofbits.de>
Grant Bowman <grantbow at grantbow.com>
Ward Fuller <wfuller at SeeBeyond.com>
Mark S. Thomas <Mark.Thomas at SWFWMD.STATE.FL.US>
William Natter <wnatter at nortelnetworks.com>
Alex Jakushev <Alex.Jakushev at kemek.lt>
Geoff Caplan <geoff at advantae.com>
Bruno Daz <bruno.diaz at gmx.net>
Michael Lesniak <ich at mlesniak.de>
Janek Kozicki <janek at thenut.eti.pg.gda.pl>
==============================================================================
FOOTNOTES
----- id=foot1
An URL like www.vim.org or stb@bf-consulting.de works via a simple heuristic
support of Utl which is similar to what you know from your web browser.
Utl completes www.xxx.domain into http://www.xxx.domain or
stb@bf-consulting.de into mailto:stb@bf-consulting.de. See <URL:../pl
ugin/utl.vim#r=Utl_checkHeuristicAbsUrl> for supported heuristics. You can
extend the heuristics defined there.
----- id=foot2
This only works if you have configured Windows Explorer as text/directory
handler, see <URL:config:#r=mt_dir>).
----- id=foot3
I try to use lower case notations <url:xxx> for URLs that cannot be executed
right away, whereas upper case samples <URL:xxx> should all be directly
executable. Note that this is only a convention used in this document, the
case does not matter. URL: url: Url: are all fine.
----- id=foot4
In the current version of Utl the cache actually is really somewhat academic.
The previous version, which was Thlnk-1.2, handled web URLs (http://...) using
a web file retriever ( wget, see http://www.gnu.org/software/wget/wget.html ).
HTML files were downloaded using wget into a local cache file and displayed
using Vim, i.e. were always displayed as text. This was very cool for text
files on the web because #tn= fragment addressing could be used. Example:
<URL:http://www.ietf.org/rfc/rfc2396.txt#tn=^1.2.>. Within html files, which
were readable enough in the text-view (in Vim) relative HTML hyperlinks could
be executed directly through the cache. Now web URLs are handled in the
mainstream manner by calling the web browser. Also people had to download
wget. But I would like to reactivate the wget possibilities in a next version.
Dynamic handler selection capabilities need to be added to Utl then.
----- id=foot5
You can use the man: protocol to hotlink from a program source code file to
the relevant man page. This makes use of the Man plugin, see |man-plugin|.
Example:
[myopen.c]
.
.
.
/* Opens file "filename".
* See <URL:man:open#tn=flags is one of> for possible values of the `flags'
* argument.
* The restrictions described under <URL:man:open#tn=^RESTRICTIONS> also
* apply to this function.
*/
int
myopen(char* filename, int flags)
{
//
open(filename, flags, mode);
//
}
.
.
.
EOF
----- id=foot6
You might want to try the following code:
:map ,m :call Mark()<cr>
fu! Mark()
let g:file = Utl_utilSlash_ExpandFullPath()
"echo "DBG: g:ins= " . g:ins
let g:text = getline(".")
endfu
:iab XF <C-R>=g:file<cr>
:imap XT #tn=<C-R>=g:text<cr>
Position the cursor at the intended target of the link and then execute the
command ,m . For inserting a link to this position type XF to insert the
file name and perhaps also XT to insert a fragment.
vim:tw=78:ts=8:ft=help:norl:fdm=marker:fen
|