diff options
Diffstat (limited to '.vim/doc')
-rw-r--r-- | .vim/doc/csupport.txt | 2152 |
1 files changed, 0 insertions, 2152 deletions
diff --git a/.vim/doc/csupport.txt b/.vim/doc/csupport.txt deleted file mode 100644 index 615279e..0000000 --- a/.vim/doc/csupport.txt +++ /dev/null @@ -1,2152 +0,0 @@ -*csupport.txt* C/C++ Support February 05 2010 - -C/C++ Support *c-support* *csupport* - Plugin version 5.10 - for Vim version 7.0 and above - Fritz Mehner <mehner@fh-swf.de> - -C/C++-IDE for Vim/gVim. It is written to considerably speed up writing code in -a consistent style. This is done by inserting complete statements,idioms, -code snippets, templates, and comments. Syntax checking, compiling, running -a program, running a code checker or a reformatter can be done with a -keystroke. - - 1. Usage |csupport-usage-gvim| - 1.1 Menu 'Comments' |csupport-comm| - 1.1.1 Append aligned comments |csupport-comm-aligned| - 1.1.2 Adjust end-of-line comments |csupport-comm-realign| - 1.1.3 Code to comment |csupport-code-to-comm| - 1.1.4 Comment to code |csupport-comm-to-code| - 1.1.5 Frame comments, file header, ... |csupport-comm-frame| - 1.1.6 File section comments .. |csupport-comm-sections| - 1.1.7 Keyword comment, special comment |csupport-comm-keyword| - 1.1.8 Tags (plugin) |csupport-comm-tags| - 1.1.9 Date and date+time |csupport-comm-date| - 1.1.10 C to C++ comments and vice versa |csupport-comm-c-cpp| - 1.2 Menu 'Statements' |csupport-stat| - 1.2.1 Normal mode, insert mode. |csupport-stat-normal-mode| - 1.2.2 Visual mode. |csupport-stat-visual-mode| - 1.3 Menu 'Preprocessor' |csupport-prep| - 1.3.1 Normal mode, insert mode. |csupport-prep-normal-mode| - 1.3.2 Visual mode. |csupport-prep-visual-mode| - 1.3.3 Block out code with #if 0 .. #endif |csupport-prep-if0| - 1.3.4 Ex-commands |csupport-prep-ex| - 1.4 Menu 'Idioms' |csupport-idioms| - 1.4.1 Item 'function' |csupport-idioms-function| - 1.4.2 for-loop control |csupport-idioms-for-loop| - 1.4.3 Item 'open input file' |csupport-idioms-input| - 1.4.4 Item 'open output file' |csupport-idioms-output| - 1.5 Menu 'Snippets' |csupport-snippets| - 1.5.1 Code snippets |csupport-snippets| - 1.5.2 Picking up prototypes |csupport-proto| - 1.5.3 Code templates |csupport-templates-menu| - 1.6 Menu 'C++' |csupport-c++| - 1.6.1 Normal mode, insert mode. |csupport-c++-normal-mode| - 1.6.2 Visual mode. |csupport-c++-visual-mode| - 1.6.3 Method implementation |csupport-c++-method-impl| - 1.6.4 Ex commands |csupport-c++-ex| - 1.7 Menu 'Run' |csupport-run| - 1.7.1 Minimal make functionality |csupport-run-buffer| - 1.7.2 Command line arguments |csupport-run-cmdline-args| - 1.7.3 Run make |csupport-run-make| - 1.7.4 Command line arguments for make |csupport-run-make-args| - 1.7.5 Splint |csupport-run-splint| - 1.7.6 CodeCheck |csupport-run-codecheck| - 1.7.7 Indent |csupport-run-indent| - 1.7.8 Hardcopy |csupport-run-hardcopy| - 1.7.9 Rebuild templates |csupport-run-templates| - 1.7.10 Xterm size |csupport-run-xterm| - 1.7.11 Output redirection |csupport-run-output| - 1.8 Help |csupport-help| - - 2. Usage without GUI |csupport-usage-vim| - 3. Hotkeys |csupport-hotkeys| - 4. Customization and configuration |csupport-custom| - 4.1 Global variables |csupport-custom-glob-vars| - 4.2 The root menu |csupport-custom-root-menu| - 4.3 System-wide installation |csupport-system-wide| - 5. Template files and tags |csupport-templates| - 5.1 Template files |csupport-templates-files| - 5.2 Macros |csupport-templates-macros| - 5.2.1 User defined formats for date and time |csupport-templates-date| - 5.3 Templates |csupport-templates-names| - 5.3.1 Template names |csupport-templates-names| - 5.3.2 Template definition |csupport-templates-definition| - 5.3.3 Template expansion |csupport-templates-expansion| - 5.3.4 The macros <+text+> etc. |csupport-templates-jump| - 5.3.5 Command Ctrl-j |csupport-Ctrl-j| - 5.4 Switching between template sets |csupport-templates-sets| - 5.5 Binding a style to a file extension |csupport-templates-bind| - 6. C/C++ Dictionaries |csupport-dictionary| - 7. Extend ctags |csupport-ctags| - 7.1 Make and qmake |csupport-ctags-make| - 7.2 Templates |csupport-ctags-templates| - 8. Folding |csupport-folding| - 9 Additional Mappings |csupport-ad-mappings| - 10. Windows particularities |csupport-windows| - 11. Additional tips |csupport-tips| - 12. Troubleshooting |csupport-troubleshooting| - 13. Release Notes /Change Log |csupport-release-notes| - - How to add this help file to Vim's help |add-local-help| - - -============================================================================== -1. USAGE WITH GUI (gVim) *csupport-usage-gvim* -============================================================================== - -If the root menu 'C/C++' is not visible call it with the item "Load C Support" -from the standard Tools-menu. -The item "Load C Support" can also be used to unload the C/C++-root menu. - -Nearly all menu entries insert code snippets or comments. All these stuff is -taken from template files and can be changed by the user to meet his -requirements (see|csupport-templates|). - ------------------------------------------------------------------------------- -1.1 MENU 'Comments' *csupport-comm* ------------------------------------------------------------------------------- - -1.1.1 APPEND ALIGNED COMMENTS TO CONSECUTIVE LINES *csupport-comm-aligned* - -In NORMAL MODE the menu items 'end-of-line comment' will append an comment to -the current line. -In VISUAL MODE these item will append aligned comments to all marked lines. -Marking the first 4 lines - - print_double_array ( double array[], - int n, - int columns, - char* arrayname - ) - -and choosing 'end-of-line com. /**/' will yield. - - print_double_array ( double array[], /* */ - int n, /* */ - int columns, /* */ - char* arrayname /* */ - ) /* */ - -If one ore more lines go beyond the starting column (s.below) the comments -will start at the 2. column after the longest line. The cursor will be -positioned inside the first comment. - -The default starting column is 49 ( = (multiple of 2,4, or 8) + 1 ). This can -be changed by setting a global variable in the file ~/.vimrc , e.g. : - - let g:C_LineEndCommColDefault = 45 - -The starting column can also be set by the menu item -'Comments->set end-of-line com. col' . Just position the cursor in an -arbitrary column (column number is shown in the Vim status line) and choose -this menu item. This setting is buffer related. - -If the cursor was at the end of a line you will be asked for a column number -because this position is most likely not the desired starting column. -Your choice will be confirmed. - ------------------------------------------------------------------------------- - -1.1.2 ADJUST END-OF-LINE COMMENTS *csupport-comm-realign* - -After some changes end-of-line comments may be no longer aligned: - - print_double_array ( double array[], /* */ - long int n, /* */ - unsigned int columns, /* */ - char* a_name /* */ - ) /* */ - -Realignment can be achieved with the menu item 'adjust end-of-line com.' In -normal mode the comment (if any) in the current line will be aligned to the -end-of-line comment column (see above) if possible. In visual mode the -comments in the marked block will be aligned: - - print_double_array ( double array[], /* */ - long int n, /* */ - unsigned int columns, /* */ - char* a_name /* */ - ) /* */ - -The realignment will not be done for comments with nothing else than leading -whitespaces. These comments are usually captions: - - max = other.max; /* the maximum value */ - len = other.len; /* the length */ - /* ===== the next section ===== */ - pos = (x+y+z)/3.0; /* the next position */ - -After the alignment we have: - - max = other.max; /* the maximum value */ - len = other.len; /* the length */ - /* ===== the next section ===== */ - pos = (x+y+z)/3.0; /* the next position */ - ------------------------------------------------------------------------------- - -1.1.3 CODE TO COMMENT *csupport-code-to-comm* - -The marked block - -xxxxxxxx -xxxxxxxx -xxxxxxxx - -will be changed by the menu item 'code->comment /**/' into the multiline -comment (all (partially) marked lines): - -/* xxxxxxxx - * xxxxxxxx - * xxxxxxxx - */ - -The marked block will be changed by the menu item 'code->comment //' into the -multiline comment - -//xxxxxxxx -//xxxxxxxx -//xxxxxxxx - -The menu items works also for a single line. A single line needs not to be -marked. - ------------------------------------------------------------------------------- - -1.1.4 COMMENT TO CODE *csupport-comm-to-code* - -If one (or more) complete comment (i.e. all lines belonging to the comment) is -marked the item 'comment->code' will uncomment it. If the following lines -are marked - - * printf ("\n"); - */ - - printf ("\n"); - - // printf ("\n"); - // - - /* - * printf ("\n"); - */ - -uncommenting will yield - - * printf ("\n"); - */ - - printf ("\n"); - - printf ("\n"); - - - - printf ("\n"); - -The first 2 lines are only a part of a C-comment and remain unchanged. -A C-comment can start with /* , /** or /*! . - -The menu item works also for a single line with a leading // . A single line -needs not to be marked. - ------------------------------------------------------------------------------- - -1.1.5 FRAME COMMENTS, FILE HEADER, ... *csupport-comm-frame* - -Frame comments, file header comments and function, methods, class descriptions -are read as templates from the appropriate files (see |csupport-templates|). - -There are to file description templates (menu items 'file description (impl.)' -and 'file description (header)', see also |csupport-templates|): - - comment.file-description : files *.c *.cc *.cp *.cxx *.cpp *.CPP *.c++ - *.C *.i *.ii - - comment.file-description-header : everything else with filetype 'c' or 'cpp' - -The appropriate template will also be included into a new file. The plugin -decides on the basis of the file extension. The default is shown above. You -can change the list by setting a global variable in '~/.vimrc': - - au BufRead,BufNewFile *.XYZ set filetype=c - - let g:C_SourceCodeExtensions = 'XYZ c cc cp cxx cpp CPP c++ C i ii' - -A new file named 'test.XYZ' will now be considered a C implementation file. - ------------------------------------------------------------------------------- - -1.1.6 FILE SECTION COMMENTS *csupport-comm-sections* - -File section comments can be uses to separate typical C- and H-file sections -with comments of similar appearance, e.g. - -/* ##### HEADER FILE INCLUDES ################################################### */ - -/* ##### MACROS - LOCAL TO THIS SOURCE FILE ################################### */ - -/* ##### TYPE DEFINITIONS - LOCAL TO THIS SOURCE FILE ######################### */ - -These section comments can also be inserted using the hotkey \ccs for C/C++ -files, or \chs for H-files. These hotkeys will start the command -'CFileSection' or 'HFileSection' on the command line: - - :CFileSection - :HFileSection - -Now type a <Tab> to start the selection menu to choose from. - ------------------------------------------------------------------------------- - -1.1.7 KEYWORD COMMENT, SPECIAL COMMENT *csupport-comm-keyword* - -Keword comments are end-of-line comments: - - /* :<keyword>:<date+time>:<author reference>: <arbitrary comment text> */ - -Keywords are - - BUG COMPILER TODO TRICKY WARNING WORKAROUND user-defined-keyword - -These are preliminary comments to document places where works will be resumed -shortly. They are usually not meant for the final documentation. These -comments are easily found by searching for the keyword. -The keyword comments can also be inserted using the hotkey \ckc . This hotkey -starts the command 'KeywordComment' on the command line: - - :KeywordComment - -Now type a <Tab> to start the selection menu to choose from. - -Special comments are occasionally used to mark special features of a code -construct (e.g. a fall through cases in a switch statement, an empty loop): - - /* EMPTY */ - /* NOT REACHED */ - /* REMAINS TO BE IMPLEMENTED */ - .... - -The special comments can also be inserted using the hotkey \csc . This hotkey -starts the command 'SpecialComment' on the command line: - - :SpecialComment - -Now type a <Tab> to start the selection menu to choose from. - ------------------------------------------------------------------------------- - -1.1.8 TAGS (PLUGIN) *csupport-comm-tags* - -The submenu 'tags (plugin)' let you insert the predefined macros from the -template system (see|csupport-templates-macros|). In visual mode the marked -string will be replaced by the macro. - ------------------------------------------------------------------------------- - -1.1.9 DATE AND DATE+TIME *csupport-comm-date* - -The format for 'date' and 'date time' can be defined by the user (see -|csupport-templates-date|). In visual mode the marked string will be replaced -by the macro (e.g. to update date and time). - ------------------------------------------------------------------------------- - -1.1.10 C TO C++ COMMENTS AND VICE VERSA *csupport-comm-c-cpp* - -The menu item '// xxx -> /* xxx */' changes a C++ comment into an C comment. -This is done for the current line in normal or insert mode and for a marked -area of lines in visual mode. -If there are multiple C comments only the first one will be changed: - printf ("\n"); /* one */ /* two */ /* three */ -will be changed into - printf ("\n"); // one /* two */ /* three */ - -The menu item '/* xxx */ -> // xxx' changes a C comment into an C++ comment. - ------------------------------------------------------------------------------- -1.2 MENU 'Statements' *csupport-stat* ------------------------------------------------------------------------------- - -1.2.1 NORMAL MODE, INSERT MODE. *csupport-stat-normal-mode* - -An empty statement will be inserted and properly indented. The item 'if{}' -will insert an if-statement: - -if ( ) -{ -} - - -1.2.2 VISUAL MODE. *csupport-stat-visual-mode* - -STATEMENTS WITH BLOCKS AND CASE LABEL. --------------------------------------- -The highlighted area - -xxxxx -xxxxx - -can be surrounded by one of the following statements: - - +----------------------------+-----------------------------+ - | if ( ) | if ( ) | - | { | { | - | xxxxx | xxxxx | - | xxxxx | xxxxx | - | } | } | - | | else | - | | { | - | | } | - +----------------------------+-----------------------------+ - | for ( ; ; ) | while ( ) | - | { | { | - | xxxxx | xxxxx | - | xxxxx | xxxxx | - | } | } | - +----------------------------+-----------------------------+ - | do | | - | { | { | - | xxxxx | xxxxx | - | xxxxx | xxxxx | - | } | } | - | while ( ); | | - +----------------------------+-----------------------------+ - | switch ( ) { | - | case : | - | break; | - | | - | case : | - | break; | - | | - | case : | - | break; | - | | - | case : | - | break; | - | | - | default: | - | break; | - | } | - +----------------------------+-----------------------------+ - -The whole statement will be indented after insertion. - - -STATEMENTS WITHOUT BLOCKS. --------------------------- -One of the following statements can be inserted: - - +-------------------------------+--------------------------+ - | if ( ) | for ( ; ; ) | - +-------------------------------+--------------------------+ - | if ( ) | while ( ) | - | else | | - +-------------------------------+--------------------------+ - | case : | | - | break; | | - +-------------------------------+--------------------------+ - - ------------------------------------------------------------------------------- -1.3 MENU 'Preprocessor' *csupport-prep* ------------------------------------------------------------------------------- - -1.3.1 NORMAL MODE, INSERT MODE. *csupport-prep-normal-mode* - -The preprocessor statements will be inserted and properly indented. - -1.3.2 VISUAL MODE. *csupport-prep-visual-mode* - -STATEMENTS WITH BLOCKS ----------------------- -The highlighted area - -xxxxx -xxxxx - -can be surrounded by one of the following statements: - - +----------------------------+-----------------------------+ - | #if CONDITION | - | xxxxx | - | xxxxx | - | #else /* ----- #if CONDITION ----- */ | - | | - | #endif /* ----- #if CONDITION ----- */ | - +----------------------------------------------------------+ - | #ifdef CONDITION | - | xxxxx | - | xxxxx | - | #else /* ----- #ifdef CONDITION ----- */ | - | | - | #endif /* ----- #ifdef CONDITION ----- */ | - +----------------------------------------------------------+ - | #ifndef CONDITION | - | xxxxx | - | xxxxx | - | #else /* ----- #ifndef CONDITION ----- */ | - | | - | #endif /* ----- #ifndef CONDITION ----- */ | - +----------------------------------------------------------+ - | #ifndef INC_TEST | - | #define INC_TEST | - | xxxxx | - | xxxxx | - | #endif /* ----- #ifndef INC_TEST ----- */ | - +----------------------------------------------------------+ - | #if 0 /* ----- #if 0 : If0Label_1 ----- */ | - | | - | #endif /* ----- #if 0 : If0Label_1 ----- */ | - +----------------------------------------------------------+ - -The macro name for an include guard (e.g. INC_TEST above) will be derived as a -suggestion from the file name. - -1.3.3 BLOCK OUT CODE WITH #if 0 ... #endif *csupport-prep-if0* - -The menu item #if 0 #endif inserts the lines - - #if 0 /* ----- #if 0 : If0Label_1 ----- */ - - #endif /* ----- #if 0 : If0Label_1 ----- */ - -In visual mode the marked block of lines will be surrounded by these lines. - -This is usually done to temporarily block out some code. The label names like -If0Label_1 are automatically inserted into the comments. The trailing numbers -are automatically incremented. These numbers can be changed by the user. The -next number will be one above the highest number found in the current buffer. - -A corresponding label can be found by searching with the vim star command (*). -All labels can be found with a global search like :g/If0Label_/ or -:g/If0Label_\d\+/. All corresponding lines can be deleted with :g/If0Label_/d . - - -REMOVE THE ENCLOSING #if 0 ... #endif -CONSTRUCT. - -The menu item 'remove #if #endif' removes such a construct if the cursor is -in the middle of such a section or on one of the two enclosing lines. Nested -constructs will be untouched. - -1.3.4 EX-COMMANDS *csupport-prep-ex* - -There are 4 additional Ex command which can be used to insert include -statements: - - Ex command hotkey includes - ------------------------------------------------------------------------- - :IncludeStdLibrary \ps C standard library - :IncludeC99Library \pc C99 library - :IncludeCppLibrary \+ps C++ standard library - :IncludeCppCLibrary \+pc C standard library ( #include <c...> ) - -Type :Inc<Tab> and choose one of the commands. Now type an additional space -and a <Tab> to show the whole list list or type a space and a few leading -characters to reduce this list. - ------------------------------------------------------------------------------- -1.4 MENU 'Idioms' *csupport-idioms* ------------------------------------------------------------------------------- - -1.4.1 Item 'function' *csupport-idioms-function* - -NORMAL MODE, INSERT MODE: -The name of the function is asked for and the following lines (for function -name "f") will be inserted: - - void - f ( ) - { - return ; - } /* ---------- end of function f ---------- */ - -VISUAL MODE: -Main or [static] function: the highlighted lines will go inside the new -function or main. -for-loops: the highlighted lines will be set in braces. - -1.4.2 for-loop control *csupport-idioms-for-loop* - -The menu items 'for( x=0; ... )' and 'for( x=n-1; ... )' can be used to write -the control statement for a for-loop counting upward or downward. These items -start an input dialog - - [TYPE (expand)] VARIABLE [START [END [INCR.]]] : - -asking for at least the name of the loop variable. The other parameters are -optional. The type is restricted to the following integral data types: - - char - int - long int - long - short int - short - size_t - unsigned char - unsigned int - unsigned long int - unsigned long - unsigned short int - unsigned short - unsigned - -One of these types can be specified by typing it completely or by typing zero -or more characters of its name and completing them to the full name by using -the tab key (tab completion). If the start of the type name is ambiguous (e.g. -'uns') a list of completion candidates is provided to choose from. - -1.4.3 Item 'open input file' *csupport-idioms-input* - -The item 'open input file' will create the statements to open and close an -input file (e.g. with the file pointer 'infile'). - -1.4.4 Item 'open output file' *csupport-idioms-output* - -The item 'open output file' will create the statements to open and close an -output file (e.g. with the file pointer 'outfile'). - ------------------------------------------------------------------------------- -1.5 MENU 'Snippets' *csupport-snippets* ------------------------------------------------------------------------------- - -1.5.1 CODE SNIPPETS - -Code snippets are pieces of code which are kept in separate files in a special -directory (e.g. a few lines of code or a complete template for a Makefile). -File names are used to identify the snippets. The snippet directory will be -created during the installation ( $HOME/.vim/codesnippets-c is the default). -Snippets are managed with the 3 items - - C/C++ -> Snippets -> read code snippet - C/C++ -> Snippets -> write code snippet - C/C++ -> Snippets -> edit code snippet - -from the Snippets submenu. - -CREATING A NEW SNIPPET -When nothing is marked, "write code snippet" will write the whole buffer -to a snippet file, otherwise the marked area will be written to a file. - -INSERT A SNIPPET -Select the appropriate file from the snippet directory ("read code snippet"). -The inserted lines will be indented. - -EDIT A SNIPPET -This is a normal edit. - -INDENTATION / NO INDENTATION -Code snippets are normally indented after insertion. To suppress indentation -add the file extension "ni" or "noindent" to the snippet file name, e.g. - - parameter_handling.c.noindent - -Snippet browser ---------------- -Under a GUI a file requester will be put up. Without GUI the filename will be -read from the command line. You can change this behavior by setting a global -variable in your ~/.vimrc : - - let g:C_GuiSnippetBrowser = 'commandline' - -The default value is 'gui'. - - -1.5.2 PICKING UP PROTOTYPES *csupport-proto* - -PICK UP PROTOTYPES. -To make a prototype from a function head mark the function head and choose -'Snippets -> pick up prototype'. From the first six lines of - - void - print_double_array ( double array[], /* array to print */ - int n, /* number of elements to print */ - int columns, /* number of elements per column */ - char* arrayname /* array name */ - ) - { - ... - } /* ---------- end of function print_double_array ---------- */ - -the prototype - - void print_double_array ( double array[], int n, int columns, char* arrayname ); - -is produced and put in an internal buffer. -- Leading and trailing whitespaces are removed. -- All inner whitespaces are squeezed. -- All comments will be discarded. -- Trailing parts of the function body (e.g a '{' ) will also be removed. -- The class name and the scope resolution operator will be removed (C++ method - implementations). -Further prototypes can be picked up and gathered in the buffer. - -For C++ methods namespace names and class names will be removed -(exception: 'std::' ). The first two lines of - - std::string - ROBOT::Robot::get_name ( void ) - { - return type_name; - } /* ----- end of method Robot::get_name ----- */ - -result in the prototype - - std::string get_name ( void ); - -Folding may help picking up prototypes (see |csupport-folding|). - - -INSERT PROTOTYPES -With 'Snippets -> insert prototype(s)' all picked up prototypes currently in -the buffer will be inserted below the cursor. -The prototype buffer will be cleared after insertion. - - -DISCARD PROTOTYPES -The prototype buffer can be cleared with 'Snippets -> clear prototype(s)' . - - -SHOW PROTOTYPES -The list of gathered prototypes can be shown with -'Snippets -> show prototype(s)'. The number and the filename are shown, e.g. - - (1) matrix.c # double** calloc_double_matrix ( int rows, int columns ); - (2) matrix.c # void free_double_matrix ( double **m ); - (3) foomain.c # void foo ( ); - - -REMARK. Generating prototypes this way is nice in a small project. You may -want to use an extractor like cextract or something else. - - -1.5.3 Code Templates *csupport-templates-menu* ---------------------- -Nearly all menu entries insert code snippets or comments. All these stuff is -taken from template files and can be changed by the user to meet his -requirements (see|csupport-templates|on how to use the template system). - -The menu item 'edit local templates' opens the main template file in a local -plugin installation. This is usually the file -'~/.vim/c-support/templates/Templates'. There may be dependent files -loaded from the main file. Now change whatever file you want, save it, and -click on the menu item 'reread templates' to read in the file(s) and to -rebuild the internal representation of the templates. - -The menu item 'edit global templates' opens the main template file in a -system-wide plugin installation (see |csupport-system-wide|). This is -usually the file '$VIM./vimfiles/c-support/templates/Templates'. - -Template browser ----------------- -Under a GUI a file requester will be put up. Without GUI the filename will be -read from the command line. You can change this behavior by setting a global -variable in your ~/.vimrc : - - let g:C_GuiTemplateBrowser = 'explorer' - -The default value is 'gui'. 'explorer' will start the file explorer -(see help|:Explore|). To use the commandline asign 'commandline'. - ------------------------------------------------------------------------------- -1.6 MENU 'C++' *csupport-c++* ------------------------------------------------------------------------------- - -1.6.1 NORMAL MODE, INSERT MODE. *csupport-c++-normal-mode* - -An empty statement will be inserted and in some cases properly indented. The -item 'try .. catch' will insert the following lines: - - try { - } - catch ( const &ExceptObj ) { // handle exception: - } - catch (...) { // handle exception: unspecified - } - -The cursor will go into the try block. - -1.6.2 VISUAL MODE. *csupport-c++-visual-mode* - -The highlighted area can be surrounded by one of the following statements: - - try - catch - catch - catch(...) - namespace { } - extern "C" { } - -The whole statement will be indented after insertion. - -1.6.3 METHOD IMPLEMENTATION *csupport-c++-method-impl* - -The menu item 'method implement.' asks for a method name. If this item is -called the first time you will see just an scope resolution operator. If you -specify the scope this is used the next time you call this item. If you use -one of the menu items to generate a class (see |csupport-templates|) the -scope will be extracted and used for the next method. - -1.6.4 EX COMMANDS *csupport-c++-ex* - -There are 4 additional Ex command which can be used to insert include -statements. Please see |csupport-prep-ex|. - ------------------------------------------------------------------------------- -1.7 MENU 'Run' *csupport-run* ------------------------------------------------------------------------------- - -1.7.1 MINIMAL MAKE FUNCTIONALITY *csupport-run-buffer* - -The 'Run' menu provides a minimal make functionality for single file projects -(e.g. in education) : - -SAVE AND COMPILE -'save and compile' saves the buffer and run the compiler with the given -options (see |csupport-custom-glob-vars|). - -An error window will be opened if the compiler reports errors and/or warnings. -Quickfix commands can now be used to jump to an error location. - -Consider using maps like - map <silent> <F7> <Esc>:cprevious<CR> - map <silent> <F8> <Esc>:cnext<CR> -in your ~/.vimrc file to jump over the error locations and make navigation -easier. The error list and the error locations in your source buffer will be -synchronized. - - -LINK -'link' makes an executable from the current buffer. If the buffer is not -saved, or no object is available or the object is older then the source step -'save and compile' is executed first. - -The behavior of the compiler / linker is determined by the options assigned to -the variables described in |csupport-custom-glob-vars| (4.group). - -RUN -'run' runs the executable with the same name (extension .e) as the current -buffer. If the buffer is not saved, or no executable is available or the -executable is older then the source steps 'save and compile' and 'link' are -executed first. - - -1.7.2 COMMAND LINE ARGUMENTS *csupport-run-cmdline-args* - -The item 'command line arguments' calls an input dialog which asks for command -line arguments. These arguments are forwarded to the program which is run by -the 'run' item. The arguments are kept until you change them. -For the first and only the first argument file name expansion will work (use -the Tab-key). Only the first string of the input can be expanded due to a -restriction of the Vim input function. To expand two or more filenames -specify them in reverse order: type the first characters of the last filename -and expand them. Go to the start of the input and type the beginning of the -last but one filename and expand it. - -The arguments belong to the current buffer (that is, each buffer can have its -own arguments). -If the buffer gets a new name with "save as" the arguments will now belong to -the buffer with the new name. - -The command line arguments can be followed by pipes and redirections: - - 11 22 | sort -rn | head -10 > out - -Caveat: If you look for the current arguments by calling this menu item again -be sure to leave it with a CR (not Esc !). Due to a limitation of an internal -Vim function CR will keep the arguments, Esc will discard them. - - -1.7.3 RUN make *csupport-run-make* - -The item 'make' runs the external make program. - - -1.7.4 COMMAND LINE ARGUMENTS FOR make *csupport-run-make-args* - -The item 'command line arguments for make' calls an input dialog which asks -for command line arguments for make. These arguments are forwarded to make -when called by the item 'make'. - - -1.7.5 SPLINT *csupport-run-splint* - -Splint is a tool for statically checking C programs (see http://www.splint.org). -Of course it has to be installed in order to be used within Vim. The menu -item 'Run->splint' will run the current buffer through splint. - -An error window will be opened if splint has something to complain about. -Quickfix commands can now be used to jump to an error location. For easier -navigation see tip under 'SAVE AND COMPILE' |csupport-run-buffer|. - -Splint has many options. Presumably the best way is to keep the options in an -option file (~/.splintrc). For a quick try you can use the menu item -'Run->cmd. line arg. for splint' to specify some buffer related options. - -When vim is started this plugin will check whether splint is executable. If -not, the menu item will *NOT' be visible. - - -1.7.6 CODECHECK *csupport-run-codecheck* - -CodeCheck (TM) is a commercial code analyzing tool produced by Abraxas -Software, Inc. (www.abraxas-software.com). -Of course it has to be installed in order to be used within Vim. The menu -item 'Run->CodeCheck' will run the current buffer through CodeCheck. - -An error window will be opened if CodeCheck has something to complain about. -Quickfix commands can now be used to jump to an error location. For easier -navigation see tip under 'SAVE AND COMPILE' |csupport-run-buffer|. - -CodeCheck has many options. For a quick try you can use the menu item -'Run->cmd. line arg. for CodeCheck' to specify some buffer related options. - -CodeCheck will be run with default options (see |csupport-custom-glob-vars|). -The default options can be overwritten by placing a global variable in -~/.vimrc , e.g. - - let g:C_CodeCheckOptions = "-K13 -Rmeyers" - -The default name for the executable is 'check'. There are other names in use -on different platforms. The name can be changed by placing a global variable -in ~/.vimrc , e.g. - - let g:C_CodeCheckExeName = "chknt.exe" - -When vim is started this plugin will check whether CodeCheck is executable. If -not, the menu item will *NOT' be visible. - - -1.7.7 INDENT *csupport-run-indent* - -The formatter 'indent' can be run over the whole buffer. Before formatting a -buffer this buffer will be saved to disk and you will be asked for a -confirmation. - -Indent has many options. These are kept in the file '.indent.pro' in your home -directory. See the indent manual for more information. - - -1.7.8 HARDCOPY *csupport-run-hardcopy* - -Generates a PostScript file from the whole buffer or from a marked region. -On a Windows system a printer dialog is displayed. -The hardcopy goes to the current working directory. If the buffer contains -documentation or other material from non-writable directories the hardcopy -goes to the HOME directory. The output destination will be shown in a message. - -The print header contains date and time for the current locale. The definition -used is - - let s:C_Printheader = "%<%f%h%m%< %=%{strftime('%x %X')} Page %N" - -The current locale can be overwritten by changing the language, e.g. - - :language C - -or by setting a global variable in the file ~/.vimrc , e.g. : - - let g:C_Printheader = "%<%f%h%m%< %=%{strftime('%x %X')} SEITE %N" - -See :h printheader and :h strftime() for more details. - - -1.7.9 REBUILD TEMPLATES *csupport-run-templates* - -After editing one or more template files a click on this item rereads the -template files and rebuilds all templates. - - -1.7.10 XTERM SIZE *csupport-run-xterm* - -The size of the xterm used for running a program (below) can be set by this -menu item. The default is 80 columns with 24 lines. -This feature is not available under Windows. - - -1.7.11 OUTPUT REDIRECTION *csupport-run-output* - -Running a program can be done in one of three ways: -(1) Run the program from the gVim command line. - This is for interactive programs with little input and output. -(2) Run the program and direct the output into a window with name "C-Output". - The buffer and its content will disappear when the window is closed and - reused otherwise. - This is for non-interactive programs with little to very much output. - You have unlimited line length, regex search, navigation, ... - The tabstop value will be set to 8 for "C-Output". -(3) Run the program in an xterm. - -The output method can be chosen from the menu item 'Run->output: ...'. -This menu has three states: - - output: VIM->buffer->xterm - output: BUFFER->xterm->vim - output: XTERM->vim->buffer - -The first (uppercase) item shows the current method. The default is 'vim'. -This can be changed by setting the variable g:C_OutputGvim to another value. -Possible values are 'vim', 'buffer' and 'xterm' . - -The xterm defaults can be set in ~/.vimrc by the variable g:C_XtermDefaults . -The default is "-fa courier -fs 12 -geometry 80x24" : - font name : -fa courier - font size : -fs 12 - terminal size : -geometry 80x24 -See 'xterm -help' for more options. Xterms are not available under Windows. - ------------------------------------------------------------------------------- -1.8 'help' *csupport-help* ------------------------------------------------------------------------------- -Plugin help ------------ -The root menu item 'help (plugin)' shows this plugin help in a help window. -The help tags must have been generated with - :helptags ~/.vim/doc -The hotkey is \hp (for "help plugin"). - -Displaying a manual -------------------- -The root menu item 'show manual' shows the manual for the word under the -cursor. If there is more than one manual a selection list will be presented. -If there is no word under the cursor you can type in a name. An interface to -the on-line reference manuals must be installed (usually man(1) for -Linux/Unix, see|csupport-custom-glob-vars|). -The hotkey is \hm (for "help manual"). - -============================================================================== -2. USAGE WITHOUT GUI (Vim) *csupport-usage-vim* -============================================================================== - -The frequently used constructs can be inserted with key mappings. The -mappings are also described in the document c-hot-keys.pdf (reference card, -part of this package). -Hint: Typing speed matters. The combination of a leader ('\') and the -following character(s) will only be recognized for a short time. -The insert mode mappings start with ` (backtick). - -Legend: (i) insert mode, (n) normal mode, (v) visual mode - - -- Help --------------------------------------------------------------- - - \hm show manual for word under the cursor (n,i) - \hp show plugin help (n,i) - - -- Comments ----------------------------------------------------------- - - \cl end-of-line comment (n,v,i) - \cj adjust end-of-line comment(s) (n,v,i) - \cs set end-of-line comment column (n) - \c* code -> comment /* */ (n,v) - \cc code -> comment // (n,v) - \co comment -> code (n,v) - \cfr frame comment (n,i) - \cfu function comment (n,i) - \cme method description (n,i) - \ccl class description (n,i) - \cfdi file description (implementation) (n,i) - \cfdh file description (header) (n,i) - \ccs C/C++-file section (tab. compl.) (n,i) - \chs H-file section (tab. compl.) (n,i) - \ckc keyword comment (tab. compl.) (n,i) - \csc special comment (tab. compl.) (n,i) - \cd date (n,v,i) - \ct date \& time (n,v,i) - - -- Statements --------------------------------------------------------- - - \sd do { } while (n,v,i) - \sf for (n,i) - \sfo for { } (n,v,i) - \si if (n,i) - \sif if { } (n,v,i) - \sie if else (n,v,i) - \sife if { } else { } (n,v,i) - \se else { } (n,v,i) - \sw while (n,i) - \swh while { } (n,v,i) - \ss switch (n,v,i) - \sc case (n,i) - \s{ \sb { } (n,v,i) - - -- Preprocessor ------------------------------------------------------- - - \ps choose a standard library include (n,i) - \pc choose a C99 include (n,i) - \p< #include <> (n,i) - \p" #include "" (n,i) - \pd #define (n,i) - \pu #undef (n,i) - \pie #if #else #endif (n,v,i) - \pid #ifdef #else #endif (n,v,i) - \pin #ifndef #else #endif (n,v,i) - \pind #ifndef #def #endif (n,v,i) - \pi0 #if 0 #endif (n,v,i) - \pr0 remove #if 0 #endif (n,i) - \pe #error (n,i) - \pl #line (n,i) - \pp #pragma (n,i) - - -- Idioms ------------------------------------------------------------- - - \if function (n,v,i) - \isf static function (n,v,i) - \im main() (n,v,i) - \i0 for( x=0; x<n; x+=1 ) (n,v,i) - \in for( x=n-1; x>=0; x-=1 ) (n,v,i) - \ie enum + typedef (n,i) - \is struct + typedef (n,i) - \iu union + typedef (n,i) - \ip printf() (n,i) - \isc scanf() (n,i) - \ica p=calloc() (n,i) - \ima p=malloc() (n,i) - \isi sizeof() (n,v,i) - \ias assert() (n,v) - \ii open input file (n,i) - \io open output file (n,i) - - -- Snippets ----------------------------------------------------------- - - \nr read code snippet (n,i) - \nw write code snippet (n,v,i) - \ne edit code snippet (n,i) - \np pick up prototype (n,v,i) - \ni insert prototype(s) (n,i) - \nc clear prototype(s) (n,i) - \ns show prototype(s) (n,i) - \ntl edit local templates (n,i) - \ntg edit global templates (n,i) - \ntr rebuild templates (n,i) - - -- C++ ---------------------------------------------------------------- - - \+co cout << << endl; (n,i) - \+c class (n,i) - \+ps #include <...> STL (n,i) - \+pc #include <c..> C (n,i) - \+cn class (using new) (n,i) - \+ci class implementation (n,i) - \+cni class (using new) implementation (n,i) - \+mi method implementation (n,i) - \+ai accessor implementation (n,i) - - \+tc template class (n,i) - \+tcn template class (using new) (n,i) - \+tci template class implementation (n,i) - \+tcni template class (using new) impl. (n,i) - \+tmi template method implementation (n,i) - \+tai template accessor implementation (n,i) - - \+tf template function (n,i) - \+ec error class (n,i) - \+tr try ... catch (n,v,i) - \+ca catch (n,v,i) - \+c. catch(...) (n,v,i) - - -- Run ---------------------------------------------------------------- - - \rc save and compile (n,i) - \rl link (n,i) - \rr run (n,i) - \ra set comand line arguments (n,i) - \rm run make (n,i) - \rg cmd. line arg. for make (n,i) - \rp run splint (n,i) - \ri cmd. line arg. for splint (n,i) - \rk run CodeCheck (TM) (n,i) - \re cmd. line arg. for CodeCheck (TM) (n,i) - \rd run indent (n,v,i) - \rh hardcopy buffer (n,v,i) - \rs show plugin settings (n,i) - \rx set xterm size (n, only Linux/UNIX & GUI) - \ro change output destination (n,i) - - -- Load / Unload C/C++ Support ---------------------------------------- - - \lcs Load C/C++ Support Menus (n, GUI only) - \ucs Unload C/C++ Support Menus (n, GUI only) - -The hotkeys are defined in the file type plugin c.vim (part of this csupport -plugin package) and described in the document c-hot-keys.pdf - -Changing the default map leader '\' ------------------------------------ -The map leader can be changed by the user by setting a global variable in the -file .vimrc - - let g:C_MapLeader = ',' - -The map leader is now a comma. The 'line end comment' command is now defined -as ',cl'. This setting will be used as a so called local leader and influences -only files with filetype 'c' and 'cpp'. - -============================================================================== -3. HOTKEYS *csupport-hotkeys* -============================================================================== - -The following hotkeys are defined in normal, visual and insert mode: - - F9 compile and link - Alt-F9 write buffer and compile - Ctrl-F9 run executable - Shift-F9 set command line arguments - - Shift-F2 switch between source files and header files - -The hotkeys are defined in the file type plugin c.vim. All hotkeys from the -non-GUI mode also work for gVim (see |csupport-usage-vim|). - -Shift-F2 can be used to switch between source files and header files if the -plugin a.vim (http://vim.sourceforge.net/scripts/script.php?script_id=31) is -present. To suppress the creation of a new header file when switching from a -source file the file ~/.vimrc should contain a line - - let g:alternateNoDefaultAlternate = 1 - -A header file will only be opened if it already exists. - -The Shift-key is dead when you are working with Vim in a console terminal -(non-Gui). You could add - - noremap \a :A<CR> - inoremap \a <C-C>:A<CR> - -to get a hot key for this case. - -============================================================================== -4. CUSTOMIZATION *csupport-custom* -============================================================================== - ------------------------------------------------------------------------------- -4.1 GLOBAL VARIABLES *csupport-custom-glob-vars* ------------------------------------------------------------------------------- - -Several global variables are checked by the script to customize it: - - ---------------------------------------------------------------------------- - GLOBAL VARIABLE DEFAULT VALUE TAG (see below) - ---------------------------------------------------------------------------- - g:C_GlobalTemplateFile plugin_dir.'c-support/templates/Templates' - g:C_LocalTemplateFile $HOME.'/.vim/c-support/templates/Templates' - g:C_TemplateOverwrittenMsg 'yes' - g:C_Ctrl_j 'on' - - g:C_CodeSnippets plugin_dir."/c-support/codesnippets/" - g:C_Dictionary_File "" - g:C_LoadMenus "yes" - g:C_MenuHeader "yes" - g:C_OutputGvim "vim" - g:C_XtermDefaults "-fa courier -fs 12 -geometry 80x24" - g:C_Printheader "%<%f%h%m%< %=%{strftime('%x %X')} Page %N" - g:C_MapLeader '\' - g:C_GuiSnippetBrowser 'gui' - g:C_GuiTemplateBrowser 'gui' - - Linux/UNIX: - g:C_ObjExtension ".o" - g:C_ExeExtension "" - g:C_CCompiler "gcc" - g:C_CplusCompiler "g++" - g:C_Man "man" - Windows: - g:C_ObjExtension ".obj" - g:C_ExeExtension ".exe" - g:C_CCompiler "gcc.exe" - g:C_CplusCompiler "g++.exe" - g:C_Man "man.exe" - g:C_CFlags "-Wall -g -O0 -c" - g:C_LFlags "-Wall -g -O0" - g:C_Libs "-lm" - g:C_LineEndCommColDefault 49 - g:C_CExtension "c" - g:C_TypeOfH "cpp" - g:C_SourceCodeExtensions "c cc cp cxx cpp CPP c++ C i ii" - - g:C_CodeCheckExeName "check" - g:C_CodeCheckOptions "-K13" - -The variable plugin_dir will automatically be set to one of the following values: - $HOME.'/.vim/' for Linux/Unix - $VIM.'/vimfiles/' for Windows - - ---------------------------------------------------------------------------- - - 1. group: g:C_GlobalTemplateFile : Sets the master template file (see|csupport-templates|) - g:C_LocalTemplateFile : Sets the local template file (see|csupport-templates|) - g:C_TemplateOverwrittenMsg : message if template is overwritten - g:C_Ctrl_j : hotkey Ctrl-j 'on'/'off' (see|csupport-Ctrl-j|) - - 2. group: g:C_CodeSnippets : The name of the code snippet directory - (see |csupport-snippets|). - g:C_Dictionary_File : The name(s) of the dictionary file(s) used for - word completion (see also |csupport-dictionary|) - g:C_Root : the name of the root menu of this plugin - g:C_LoadMenus : Load menus and mappings ("yes", "no") at startup. - g:C_MenuHeader : Switch the submenu header on/off. - g:C_OutputGvim : when program is running output goes to the vim - command line ("vim"), to a buffer ("buffer") or to - an xterm ("xterm"). - g:C_XtermDefaults : the xterm defaults - g:C_Printheader : hardcopy: definition of the page header - g:C_MapLeader : the map leader for hotkeys (see|csupport-usage-vim|) - g:C_GuiSnippetBrowser : code snippet browser: 'gui', 'commandline' - g:C_GuiTemplateBrowser : code template browser: 'gui', 'explorer', 'commandline' - - 3. group: g:C_CExtension : Extension of C files. Everything else is C++. - g:C_TypeOfH : filetype of header files with extension 'h' (c,cpp) - g:C_SourceCodeExtensions : filename extensions for C/C++ - implementation files - g:C_CCompiler : The name of the C compiler. - g:C_CplusCompiler : The name of the C++ compiler. - g:C_Man : The name of the man utility. - g:C_CFlags : Compiler flags used for a compilation. - g:C_LFlags : Compiler flags used for linkage. - g:C_Libs : Libraries to link with. - g:C_ObjExtension : C/C+ file extension for objects - (leading point required if not empty) - g:C_ExeExtension : C/C+ file extension for executables - (leading point required if not empty) - g:C_LineEndCommColDefault : Default starting column for end-of-line comments. - g:C_CodeCheckExeName : The name of the CodeCheck (TM) executable - (the default is 'check') - g:C_CodeCheckOptions : Default options for CodeCheck (TM) - (see |csupport-run-codecheck|). - -To override the default add appropriate assignments to ~/.vimrc . - ------------------------------------------------------------------------------- -4.2 THE ROOT MENU *csupport-custom-root-menu* ------------------------------------------------------------------------------- - -The variable g:C_Root, if set (in ~/.vimrc or in ~/.gvimrc), gives the name of -the single Vim root menu item in which the C/C++ submenus will be put. The -default is - '&C\/C\+\+.' -Note the terminating dot. A single root menu can be used if the screen is -limited or several plugins are used in parallel. - -If set to "", this single root menu item will not appear. Now all submenus -are put into the Vim root menu. This is nice for beginners in a lab -installation or for C-only programmers. - ------------------------------------------------------------------------------- -4.3 SYSTEM-WIDE INSTALLATION *csupport-system-wide* ------------------------------------------------------------------------------- - -A system-wide installation (one installation for all users) is done as -follows. - -As *** SUPERUSER *** : - -(1) Find the Vim installation directory. -The Vim Ex command ':echo $VIM' gives '/usr/local/share/vim' or something like -that. Beyond this directory you will find the Vim installation, e.g. in -'/usr/local/share/vim/vim71' if Vim version 7.1 has been installed. - -(2) Create a new subdirectory 'vimfiles', e.g. '/usr/local/share/vim/vimfiles'. - -(3) Install C/C++ Support -Copy the archive cvim.zip to this new directory and unpack it: - unzip cvim.zip - -(4) Generate the help tags: - :helptags $VIM/vimfiles/doc - - -As *** USER *** : - -Create your private snippet directory: - - mkdir --parents ~/.vim/c-support/codesnippets - -You may want to copy the snippets coming with this plugin (in -$VIM/vimfiles/c-support/codesnippets) into the new directory or to set a -link to the global directory. - -Create your private template directory: - - mkdir --parents ~/.vim/c-support/template - -Create a private template file 'Templates' in this directory to overwrite some -macros, e.g. - - *|AUTHOR|* = your name - *|AUTHORREF|* = ... - *|EMAIL|* = ... - *|COMPANY|* = ... - *|COPYRIGHT|* = ... - -You can also have local templates which overwrite the global ones. To suppress -the messages in this case set a global variable in '~/.vimrc' : - - let g:C_TemplateOverwrittenMsg= 'no' - -The default is 'yes'. - -============================================================================== -5. TEMPLATE FILES AND TAGS *csupport-templates* -============================================================================== - ------------------------------------------------------------------------------- -5.1 TEMPLATE FILES *csupport-templates-files* ------------------------------------------------------------------------------- - -Nearly all menu entries insert code snippets or comments. All these stuff is -taken from template files and can be changed by the user to meet his -requirements. - -The master template file is '$HOME/.vim/c-support/templates/Templates' for a -user installation and '$VIM/vimfiles/c-support/templates/Templates' for a -system-wide installation (see|csupport-system-wide|). - -The master template file starts with a macro section followed by templates for -single menu items or better by including other template files grouping the -templates according to the menu structure of this plugin. The master file -could look like this: - - $ - $ ============================================================= - $ ========== USER MACROS ====================================== - $ ============================================================= - $ - *|AUTHOR|* = Dr. Fritz Mehner - *|AUTHORREF|* = mn - *|EMAIL|* = mehner@fh-swf.de - *|COMPANY|* = FH Südwestfalen, Iserlohn - *|COPYRIGHT|* = Copyright (c)*|YEAR|,|AUTHOR|* - $ - $ ============================================================= - $ ========== FILE INCLUDES ==================================== - $ ============================================================= - $ - *|includefile|* = c.comments.template - *|includefile|* = c.cpp.template - *|includefile|* = c.idioms.template - *|includefile|* = c.preprocessor.template - *|includefile|* = c.statements.template - -Lines starting with a dollar sign are comments. The section starting -with *|AUTHOR|* assigns values to predefined tags -(see|csupport-templates-macros|) to personalize some templates. Other -predefined tags with given default values can be used (e.g. *|YEAR|* ). - -User defined tags are possible. They have the following syntax: - - *|macroname|* = replacement - -A macroname starts with a letter (uppercase or lowercase) followed by zero or -more letters, digits or underscores. - ------------------------------------------------------------------------------- -5.2 MACROS *csupport-templates-macros* ------------------------------------------------------------------------------- - -The following macro names are predefined. The first group is used to -personalize templates. - - ---------------------------------------------------------------------------- - PREDEFINED MACROS DEFAULT VALUE - ---------------------------------------------------------------------------- -*|AUTHOR|* "" -*|AUTHORREF|* "" -*|EMAIL|* "" -*|COMPANY|* "" -*|PROJECT|* "" -*|COPYRIGHTHOLDER|* "" -*|STYLE|* "" -*|includefile|* "" - -*|BASENAME|* filename without path and suffix -*|DATE|* the preferred date representation for the current locale - without the time -*|FILENAME|* filename without path -*|PATH|* path without filename -*|SUFFIX|* filename suffix -*|TIME|* the preferred time representation for the current locale - without the date and the time zone or name or abbreviation -*|YEAR|* the year as a decimal number including the century - -The macro *|includefile|* can be used to include an additional template file. -A file will be included only once. Commenting and uncommenting include macros -is a simple way to switch between several sets of templates (see also -|csupport-run-templates|). Overwriting existing macros and templates is -possible. - - ---------------------------------------------------------------------------- - PREDEFINED TAGS - ---------------------------------------------------------------------------- - <CURSOR> The cursor position after insertion of a template - <+text+>,<-text->, Jump targets in templates. Jump with Ctrl-j. - {+text+},{-text-} See |csupport-templates-jump|. - - <SPLIT> The split point when inserting in visual mode - (see|csupport-templates-definition|) - -A dependent template file can start with its own macro section. There is no -need to have all user defined macros in the master file. -When the first template definition is found (see below) macro definitions are -no longer recognized. - ------------------------------------------------------------------------------- -5.2.1 USER DEFINED FORMATS FOR DATE AND TIME *csupport-templates-date* ------------------------------------------------------------------------------- -The format for *|DATE|* ,*|TIME|* , and*|YEAR|* can be set by the user. The -defaults are - *|DATE|* '%x' - *|TIME|* '%X' - *|YEAR|* '%Y' -See the manual page of the C function strftime() for the format. The accepted -format depends on your system, thus this is not portable! The maximum length -of the result is 80 characters. - -User defined formats can be set using the following global variables in -~/.vimrc , e.g. - let g:C_FormatDate = '%D' - let g:C_FormatTime = '%H:%M' - let g:C_FormatYear = 'year %Y' - ------------------------------------------------------------------------------- -5.3 TEMPLATES *csupport-templates-names* ------------------------------------------------------------------------------- - -5.3.1 Template names - -The template behind a menu entry is identified by a given name. The first part -of the name identifies the menu, the second part identifies the item. The -modes are also hard coded (see|csupport-templates-definition|for the use of -<SPLIT>). - - TEMPLATE NAME MODES - -------------------------------------------------------------------------- - - comment.class normal - comment.end-of-line-comment normal - comment.file-description normal - comment.file-description-header normal - comment.file-section-cpp-class-defs normal - comment.file-section-cpp-class-implementations-exported normal - comment.file-section-cpp-class-implementations-local normal - comment.file-section-cpp-data-types normal - comment.file-section-cpp-function-defs-exported normal - comment.file-section-cpp-function-defs-local normal - comment.file-section-cpp-header-includes normal - comment.file-section-cpp-local-variables normal - comment.file-section-cpp-macros normal - comment.file-section-cpp-prototypes normal - comment.file-section-cpp-typedefs normal - comment.file-section-hpp-exported-class-defs normal - comment.file-section-hpp-exported-data-types normal - comment.file-section-hpp-exported-function-declarations normal - comment.file-section-hpp-exported-typedefs normal - comment.file-section-hpp-exported-variables normal - comment.file-section-hpp-header-includes normal - comment.file-section-hpp-macros normal - comment.frame normal - comment.function normal - comment.keyword-bug normal - comment.keyword-compiler normal - comment.keyword-keyword normal - comment.keyword-todo normal - comment.keyword-tricky normal - comment.keyword-warning normal - comment.keyword-workaround normal - comment.method normal - comment.special-constant-type-is-long normal - comment.special-constant-type-is-unsigned-long normal - comment.special-constant-type-is-unsigned normal - comment.special-empty normal - comment.special-fall-through normal - comment.special-implicit-type-conversion normal - comment.special-no-return normal - comment.special-not-reached normal - comment.special-remains-to-be-implemented normal - - cpp.accessor-implementation normal - cpp.catch normal, visual - cpp.catch-points normal, visual - cpp.cin normal - cpp.class-definition normal - cpp.class-implementation normal - cpp.class-using-new-definition normal - cpp.class-using-new-implementation normal - cpp.cout-operator normal - cpp.cout normal - cpp.error-class normal - cpp.extern normal, visual - cpp.method-implementation normal - cpp.namespace-block normal, visual - cpp.namespace normal - cpp.namespace-std normal - cpp.open-input-file normal - cpp.open-output-file normal - cpp.operator-in normal - cpp.operator-out normal - cpp.output-manipulator-boolalpha normal - cpp.output-manipulator-dec normal - cpp.output-manipulator-endl normal - cpp.output-manipulator-fixed normal - cpp.output-manipulator-flush normal - cpp.output-manipulator-hex normal - cpp.output-manipulator-internal normal - cpp.output-manipulator-left normal - cpp.output-manipulator-oct normal - cpp.output-manipulator-right normal - cpp.output-manipulator-scientific normal - cpp.output-manipulator-setbase normal - cpp.output-manipulator-setfill normal - cpp.output-manipulator-setiosflag normal - cpp.output-manipulator-setprecision normal - cpp.output-manipulator-setw normal - cpp.output-manipulator-showbase normal - cpp.output-manipulator-showpoint normal - cpp.output-manipulator-showpos normal - cpp.output-manipulator-uppercase normal - cpp.rtti-const-cast normal - cpp.rtti-dynamic-cast normal - cpp.rtti-reinterpret-cast normal - cpp.rtti-static-cast normal - cpp.rtti-typeid normal - cpp.template-accessor-implementation normal - cpp.template-class-definition normal - cpp.template-class-implementation normal - cpp.template-class-using-new-definition normal - cpp.template-class-using-new-implementation normal - cpp.template-function normal - cpp.template-method-implementation normal - cpp.try-catch normal, visual - - idioms.assert normal - idioms.calloc normal - idioms.enum normal, visual - idioms.fprintf normal - idioms.fscanf normal - idioms.function normal, visual - idioms.function-static normal, visual - idioms.main normal, visual - idioms.malloc normal - idioms.open-input-file normal - idioms.open-output-file normal - idioms.printf normal - idioms.scanf normal - idioms.sizeof normal - idioms.struct normal, visual - idioms.union normal, visual - - preprocessor.define normal - preprocessor.ifdef-else-endif normal, visual - preprocessor.if-else-endif normal, visual - preprocessor.ifndef-def-endif normal, visual - preprocessor.ifndef-else-endif normal, visual - preprocessor.include-global normal - preprocessor.include-local normal - preprocessor.undefine normal - - statements.block normal, visual - statements.case normal - statements.do-while normal, visual - statements.for-block normal - statements.for normal - statements.if-block-else normal, visual - statements.if-block normal, visual - statements.if-else normal, visual - statements.if normal - statements.switch normal, visual - statements.while-block normal, visual - statements.while normal - - -5.3.2 Template definition *csupport-templates-definition* - -A template definition starts with a template head line with the following -syntax: - - == templatename == [ position == ] - -The templatename is one of the above template identifiers. The position -attribute is optional. Possible attribute values are: - - above insert the template before the current line - append append the template to the current line - below insert the template below the current line - insert insert the template at the cursor position - start insert the template before the first line of the buffer - -An example: - - == comment.function == - /* - * === FUNCTION ======================================================= - * Name: <CURSOR> - * Description: - * ====================================================================== - */ - -The definition of a template ends at the next head line or at the end of the -file. - -Templates for the visual mode can use <SPLIT>. The text before <SPLIT> will -than be inserted above the marked area, the text after <SPLIT> will be -inserted behind the marked area. An example: - - == statements.if-block-else == - if ( <CURSOR> ) { - <SPLIT>} else { - } - -If applied to the marked block - - xxxxxxxxxxx - xxxxxxxxxxx - -this template yields - - if ( ) { - xxxxxxxxxxx - xxxxxxxxxxx - } else { - } - -The templates with a visual mode are shown in the table under -|csupport-templates-names|. - -5.3.3 Template expansion *csupport-templates-expansion* - -There are additional ways to control the expansion of a template. - -USER INPUT ----------- -If the usage of a yet undefined user macro starts with a question mark the -user will be asked for the replacement first, e.g. with the following template - - == idioms.function == - void<CURSOR> - *|?FUNCTION_NAME|* ( ) - { - <SPLIT> return ; - } /* ----- end of function*|FUNCTION_NAME|* ----- */ - -The user can specify the function name which then will be applied twice. If -the macro was already in use the old value will be suggested as default. - -MACRO MANIPULATION ------------------- - -A macro expansion can be controlled by the following attributes - - :l change macro text to lowercase - :u change macro text to uppercase - :c capitalize macro text - :L legalize name - -The include guard template is an example for the use of ':L' : - - == preprocessor.ifndef-def-endif == - #ifndef *|?BASENAME:L|_INC* - #define *|BASENAME|_INC* - <CURSOR><SPLIT> - #endif // ----- #ifndef*|BASENAME|_INC* ----- - -The base name of the file shall be used as part of the include guard name. -The predefined macro*|BASENAME|* is used to ask for this part because this -macro has already a defined value. That value can accepted or replaced by the -user. For the filename 'test test++test.h' the legalized base name -'TEST_TEST_TEST' will be suggested. - -Legalization means: - - replace all whitespaces by underscores - - replace all non-word characters by underscores - - replace '+' and '-' by underscore - -5.3.4 The macros <+text+> etc. *csupport-templates-jump* - -There are four macro types which can be used as jump targets in templates: - - <+text+> Can be jumped to by hitting Ctrl-j. - {+text+} Same as <+text+>. Used in cases where indentation gives unwanted - results with the first one. - - <-text-> Same as the two above. Will be removed if the template is used - {-text-} in visual mode. - -The text inside the brackets is userdefined and can be empty. The text -can be composed from letters (uppercase and lowercase), digits, underscores -and blanks. After the insertion of an template these jump targets will be -highlighted. - -5.3.5 Command Ctrl-j *csupport-Ctrl-j* - -Use the command Ctrl-j to jump to the next target. The target will be removed -and the mode will switched to insertion. Ctrl-j works in normal and in insert -mode. - -The template for a function can be written as follows: - - == idioms.function == - void<CURSOR> - |?FUNCTION_NAME| ( <+argument list+> ) - { - <SPLIT> return <+return value+>; - } /* ----- end of function |FUNCTION_NAME| ----- */ - -The cursor will be set behind 'void'. You can remove 'void' easily with -Ctrl-w (delete word before cursor) and insert a new type. A Ctrl-j leads you -to the argument list. The target disappears and you can type on. When the -function body is written a final Ctrl-j brings you to the return statement. - -The following example shows the usage of the type {-text-}. The idiom for the -opening of a file marks the line before the file is closed. This is also the -line where the template will be split to surround a marked area. In this case -(visual mode) the target is not needed and therefore removed (minus signs as -mnemonic). In normal and insert mode the target is meaningful and will be -therefore be present. The form <-...-> would result in a wrong indentation of -the file close statement. The brace type will be handled as a block and the -indentation will be correct. - - == cpp.open-input-file == - char *ifs_file_name = "<CURSOR>"; /* input file name */ - ifstream ifs; /* create ifstream object */ - - ifs.open (ifs_file_name); /* open ifstream */ - if (!ifs) { - cerr << "\nERROR : failed to open input file " << ifs_file_name << endl; - exit (EXIT_FAILURE); - } - <SPLIT>{-continue here-} - ifs.close (); /* close ifstream */ - -Extra feature of Ctrl-j ------------------------ -If none of the above described targets is left Ctrl-j can be used to jump -behind closing brackets, parenthesis, braces, or string terminators ('"`). -This feature is limited to the current line. Ctrl-j does not jump behind the -last character in a line. - - -How to switch the mapping for Ctrl-j off ----------------------------------------- -The original meaning of Ctrl-j is 'move [n] lines downward' (see |CTRL-j|). -If you are accustomed to use the deafult and don't like these jump targets you -can switch them off. Put the following line in the file .vimrc : - - let g:C_Ctrl_j = 'off' - -The default value of g:C_Ctrl_j is 'on'. You do not have to change the -template files. All jump targets will be removed before a template will be -inserted. - -============================================================================== -5.4 SWITCHING BETWEEN TEMPLATE SETS *csupport-templates-sets* -============================================================================== - -This plugin comes with two sets of templates. These are suggestions. You may -want to have additional sets for different projects or occasionally want to -use doxygen style comments. To facilitate switching use the macro*|STYLE|* -(|csupport-templates-files|) to define a unique name and the -IF-ENDIF-construct to choose a particular set of files for example: - - ... - - *|STYLE|* = C - $ - $ ============================================================= - $ ========== FILE INCLUDES ==================================== - $ ============================================================= - $ - == IF *|STYLE|* IS C == - $ - |includefile| = c.comments.template - |includefile| = c.cpp.template - |includefile| = c.idioms.template - |includefile| = c.preprocessor.template - |includefile| = c.statements.template - $ - == ENDIF == - - ... - -The syntax is as follows: - - == IF macro_name IS macro_value == - - == ENDIF == - -Includes outside an IF-ENDIF construct are associated with the default style -'default'. A style set does not have to a complete set of templates. For an -incomplete set the other templates are taken from the default style. - -IF, IS, and ENDIF are keywords. - -HINT. Use these constructs to avoid overwriting your templates when updating -csupport. Copy and rename the set of files you want to change and surround the -includes with an appropriate IF-construct: - - *|STYLE|* = MY_C - $ - ... - $ - == IF *|STYLE|* IS MY_C == - |includefile| = my_c.comments.template - |includefile| = my_c.cpp.template - |includefile| = my_c.idioms.template - |includefile| = my_c.preprocessor.template - |includefile| = my_c.statements.template - == ENDIF == - -Keep a copy of the main template file 'Templates' because this file will be -overwritten if you do not update manually. - -============================================================================== -5.5 BINDING A STYLE TO A FILE EXTENSION *csupport-templates-bind* -============================================================================== - -You can bind the existing styles to one or more filename extensions. To do so -assign a Dictionary to the global variable g:C_Styles in '~/.vimrc' : - -let g:C_Styles = { '*.c,*.h' : 'default', '*.cc,*.cpp,*.hh' : 'CPP' } - -A Dictionary is created with a comma separated list of entries in curly -braces. Each entry has a key and a value, separated by a colon. Each key can -only appear once. The keys are themselves a comma separated list of filename -pattern. The values are existing styles defined in the template files. -The given style will be set automatically when switching to a buffer or -opening a new buffer with the associated filename pattern and supersedes the -macro *|STYLE|* . - -============================================================================== -6. C/C++ DICTIONARY *csupport-dictionary* -============================================================================== - -The files - - c-c++-keywords.list - k+r.list - stl_index.list - -are a part of this plugin and can be used (together with your own lists) as -dictionaries for automatic word completion. This feature is enabled by -default. The default word lists are - - plugin_dir/c-support/wordlists/c-c++-keywords.list - plugin_dir/c-support/wordlists/k+r.list - plugin_dir/c-support/wordlists/stl_index.list - -The variable plugin_dir will automatically be set by the plugin to one of the -following values: - $HOME.'/.vim/' for Linux/Unix - $VIM.'/vimfiles/' for Windows -If you want to use an additional list MyC.list put the following lines into - ~/.vimrc : - - let g:C_Dictionary_File = PLUGIN_DIR.'/c-support/wordlists/c-c++-keywords.list,'. - \ PLUGIN_DIR.'/c-support/wordlists/k+r.list,'. - \ PLUGIN_DIR.'/c-support/wordlists/stl_index.list,'. - \ PLUGIN_DIR.'/c-support/wordlists/MyC.list' - -When in file ~/.vimrc the name PLUGIN_DIR has to be replaced by $HOME or -$VIM (see above). Whitespaces in the pathnames have to be escaped with a -backslash. -The right side is a comma separated list of files. Note the point at the end -of the first line (string concatenation) and the backslash in front of the -second line (continuation line). -You can use Vim's dictionary feature CTRL-X, CTRL-K (and CTRL-P, CTRL-N). - -============================================================================== -7. EXTENDING ctags *csupport-ctags* -============================================================================== - ------------------------------------------------------------------------------- -7.1 make AND qmake *csupport-ctags-make* ------------------------------------------------------------------------------- - -The use of the Vim plugin taglist.vim (Author: Yegappan Lakshmanan) is highly -recommended. It uses the program ctags which generates tag files for 3 dozen -languages (Exuberant Ctags, Darren Hiebert, http://ctags.sourceforge.net). -With the following extensions the list of targets in a makefile can be shown -in the taglist window. - - 1) Append the file customization.ctags to the file $HOME/.ctags . - - 2) Add the following lines (from customization.vimrc) to $HOME/.vimrc : - - " - "------------------------------------------------------------------- - " taglist.vim : toggle the taglist window - " taglist.vim : define the title texts for make - " taglist.vim : define the title texts for qmake - "------------------------------------------------------------------- - noremap <silent> <F11> <Esc><Esc>:Tlist<CR> - inoremap <silent> <F11> <Esc><Esc>:Tlist<CR> - - let tlist_make_settings = 'make;m:makros;t:targets;i:includes' - let tlist_qmake_settings = 'qmake;t:SystemVariables' - - if has("autocmd") - " ---------- qmake : set file type for *.pro ---------- - autocmd BufNewFile,BufRead *.pro set filetype=qmake - endif " has("autocmd") - - 3) restart vim/gvim - -The two maps will toggle the taglist window (hotkey F11) in all editing modes. -The two assignments define the headings for the (q)make sections in the -taglist window. The autocmd set the file type 'qmake' for the filename -extension 'pro' (ctags needs this). - ------------------------------------------------------------------------------- -7.2 TEMPLATES *csupport-ctags-templates* ------------------------------------------------------------------------------- - -If you frequently change the plugin templates and you are using the taglist -plugin (section above) you may want to use this plugin for navigation. This is -achieved in two steps. First add a new language definition to the file -$HOME/.ctags : - - --langdef=template - --langmap=template:.template,TEMPLATE - --regex-template=/^==\s+([^=]+)\s+==\s*(\s+==\s+([^=]+)\s+==)?/\1/t,template/ - -Now add the following lines to the file $HOME/.vimrc : - - let tlist_template_settings = 'template;t:template' - "--------------------------------------------------------------- - " plugin templates : set filetype for *.template - "--------------------------------------------------------------- - if has("autocmd") - autocmd BufNewFile,BufRead Templates set filetype=template - autocmd BufNewFile,BufRead *.template set filetype=template - endif " has("autocmd") - -The assignment defines the heading for the template section in the taglist -window. The autocmds set the file type 'template' for the main template file -'Templates' and the includefiles '*.template' (if any). - -============================================================================== -8. FOLDING *csupport-folding* -============================================================================== - -This plugin can be used together with folding. - -There are a few peculiarities when the cursor is on a closed fold before -inserting a template: - -Normal mode ------------ -Inserting blocks of complete lines below and above a fold (e.g. frame -comments) and inserting at the top of a buffer (e.g. file description) works -as usual. -Insertions which go to the end of a line (e.g. end-of-line comments) and -insertions which go to the cursor position (e.g. 'sizeof()') will be suppressed -and a warning will be shown. - -Visual mode ------------ -A range of lines containing closed folds can be surrounded by constructs which -have a visual mode, e.g. a for-loop: - - for ( ; ; ) { - +--- 4 lines: {------------------------------------------------------------ - } - -See |folding| for more information on folding. - -============================================================================== -9. Additional Mappings *csupport-ad-mappings* -============================================================================== - -There are a few additional filetype specific key mappings defined in -'~/.vim/ftplugin/c.vim'. - -Complete a classical C comment: '/*' => '/* | */' (modes: i,v). - -Complete a classical C multi-line comment (mode: i): - '/*<CR>' => /* - * | - */ - -Open a block (modes: i,v): - '{<CR>' => { - | - } -In visual mode the content of the new block will be indented. - -============================================================================== -10. WINDOWS PARTICULARITIES *csupport-windows* -============================================================================== - -The plugin should go into the directory structure below the local -installation directory $HOME/.vim/ for LINUX/UNIX and $VIM/vimfiles/ for -Windows. -The values of the two variables can be found from inside Vim: - :echo $VIM -or - :echo $HOME - -Configuration files: - - LINUX/UNIX : $HOME/.vimrc and $HOME/.gvimrc - Windows : $VIM/_vimrc and $VIM/_gvimrc - -Compiler settings: - -It could be necessary to add further settings for your compiler. To compile -C++-programs using a Dev-C++ installation (http://www.bloodshed.net) the -following item in $VIM/_vimrc is needed (depends on the Dev-C++ install -directory): - - let g:C_CFlags = '-Wall -g -o0 -c -I c:\programs\dev-c++\include\g++' - -============================================================================== -11. ADDITIONAL TIPS *csupport-tips* -============================================================================== - -(1) gVim. Toggle 'insert mode' <--> 'normal mode' with the right mouse button - (see mapping in file costumization.gvimrc). - -(2) gVim. Use tear off menus. - -(3) Try 'Focus under mouse' as window behavior (No mouse click when the mouse - pointer is back from the menu item). - -(4) Use Emulate3Buttons "on" (X11) even for a 3-button mouse. Pressing left - and right button at the same time without moving your fingers is faster - then moving a finger to the middle button (often a wheel). - -============================================================================== -12. TROUBLESHOOTING *csupport-troubleshooting* -============================================================================== - -* I do not see any new main menu item. - - Was the archive extracted into the right directory? - -* How can I see what was loaded? - - Use ':scriptnames' from the Vim command line. - -* No main menu item. - - Loading of plugin files must be enabled. If not use - :filetype plugin on - This is the minimal content of the file '$HOME/.vimrc'. Create one if there - is none, or better use customization.vimrc. - -* Most key mappings do not work. - - They are defined in a filetype plugin in '$HOME/.vim/ftplugin/'. Use - ':filetype' to check if filetype plugins are enabled. If not, add the line - filetype plugin on - to the file '~/.vimrc'. - -* Some hotkeys do not work. - - The hotkeys might be in use by your graphical desktop environment. Under - KDE Ctrl-F9 is the hotkey which let you switch to the 9. desktop. The key - settings can usually be redefined. - -* Splint and/or CodeCheck menu item not visible. - - The program is not installed or not found (path not set) or not executable. - -============================================================================== -13. RELEASE NOTES *csupport-release-notes* -============================================================================== -See file c-support/doc/ChangeLog . - -============================================================================== -vim:tw=78:noet:ts=2:ft=help:norl: |