summaryrefslogtreecommitdiffstats
path: root/doc/ft-csv.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/ft-csv.txt')
-rw-r--r--doc/ft-csv.txt1768
1 files changed, 0 insertions, 1768 deletions
diff --git a/doc/ft-csv.txt b/doc/ft-csv.txt
deleted file mode 100644
index 7ef33464..00000000
--- a/doc/ft-csv.txt
+++ /dev/null
@@ -1,1768 +0,0 @@
-if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'csv') == -1
-
-*ft-csv.txt* For Vim version 7.4 Last Change: Thu, 15 Jan 2015
-
-Author: Christian Brabandt <cb@256bit.org>
-Version: 0.31
-Homepage: http://www.vim.org/scripts/script.php?script_id=2830
-
-The VIM LICENSE applies to the CSV filetype plugin (see |copyright|).
-NO WARRANTY, EXPRESS OR IMPLIED. USE AT-YOUR-OWN-RISK.
- *csv-toc*
-1. Introduction.................................|csv-intro|
-2. Installation.................................|csv-installation|
-3. CSV Commands.................................|csv-commands|
- 3.1 WhatColumn..............................|WhatColumn_CSV|
- 3.2 NrColumns...............................|NrColumns_CSV|
- 3.3 SearchInColumn..........................|SearchInColumn_CSV|
- 3.4 HiColumn................................|HiColumn_CSV|
- 3.5 ArrangeColumn...........................|ArrangeColumn_CSV|
- 3.6 UnArrangeColumn.........................|UnArrangeColumn_CSV|
- 3.7 DeleteColumn............................|DeleteColumn_CSV|
- 3.8 InitCSV.................................|InitCSV|
- 3.9 Header..................................|Header_CSV|
- 3.10 Sort...................................|Sort_CSV|
- 3.11 CopyColumn.............................|Copy_CSV|
- 3.12 MoveColumn.............................|MoveCol_CSV|
- 3.13 Sum of a column........................|SumCol_CSV|
- 3.14 Create new records ....................|NewRecord_CSV|
- 3.15 Change the delimiter...................|NewDelimiter_CSV|
- 3.16 Check for duplicate records............|Duplicate_CSV|
- 3.17 Normal mode commands...................|csv-mapping|
- 3.18 Convert CSV file.......................|csv-convert|
- 3.19 Dynamic filters........................|csv-filter|
- 3.20 Analyze a column.......................|csv-analyze|
- 3.21 Vertical Folding.......................|csv-vertfold|
- 3.22 Transposing columns....................|csv-transpose|
- 3.23 Transforming into a table..............|csv-tabularize|
- 3.24 Add new empty columns..................|AddColumn_CSV|
- 3.25 Substitute in columns..................|Substitute_CSV|
- 3.26 Count values inside a column...........|Count_CSV|
- 3.27 Maximum/Minimum values ................|MaxCol_CSV|
- 3.28 Average values.........................|AvgCol_CSV|
- 3.29 Variance of a Column...................|VarCol_CSV|
- 3.30 Standard Deviation of a Column.........|StdDevCol_CSV|
- 3.31 Duplicate columns......................|DupColumn_CSV|
- 3.32 Column width...........................|ColumnWidth_CSV|
-4. CSV Filetype configuration...................|csv-configuration|
- 4.1 Delimiter...............................|csv-delimiter|
- 4.2 Column..................................|csv-column|
- 4.3 HiGroup.................................|csv-higroup|
- 4.4 Strict Columns..........................|csv-strict|
- 4.5 Concealing..............................|csv-conceal|
- 4.6 Newlines................................|csv-newline|
- 4.7 Highlight column automatically..........|csv-hicol|
- 4.8 Fixed width columns.....................|csv-fixedwidth|
- 4.8.1 Manual setup
- 4.8.2 Setup using a Wizard
- 4.9 CSV Header lines........................|csv-header|
- 4.10 Number format..........................|csv-nrformat|
- 4.11 Move folded lines......................|csv-move-folds|
- 4.12 Using Comments.........................|csv-comments|
- 4.13 Size and performance considerations....|csv-size|
-5. Functions....................................|CSV-Functions|
- 5.1 CSVPat()................................|CSVPat()|
- 5.2 CSVField()..............................|CSVField()|
- 5.3 CSVCol()................................|CSVCol()|
- 5.4 CSVSum()................................|CSVSum()|
- 5.5 CSVCount()..............................|CSVCount()|
- 5.6 CSVMax()................................|CSVMax()|
- 5.7 CSVMin()................................|CSVMin()|
- 5.8 CSVAvg()................................|CSVAvg()|
- 5.9 CSVWidth()..............................|CSVWidth()|
-6. CSV Tips and Tricks..........................|csv-tips|
- 6.1 Statusline..............................|csv-stl|
- 6.2 Slow CSV plugin.........................|csv-slow|
- 6.3 Defining custom aggregate functions.....|csv-aggregate-functions|
- 6.4 Autocommand on opening/closing files....|csv-arrange-autocmd|
- 6.5 CSV Syntax error........................|csv-syntax-error|
- 6.6 Calculating new column values...........|csv-calculate-column|
- 6.7 Using the result of an evaluation.......|b:csv_result|
-7. CSV Changelog................................|csv-changelog|
-
-==============================================================================
-1. Introduction *csv-intro*
-
-This plugin is used for handling column separated data with Vim. Usually those
-files are called csv files and use the ',' as delimiter, though sometimes they
-use e.g. the '|' or ';' as delimiter and there also exists fixedwidth columns.
-The aim of this plugin is to ease handling these kinds of files.
-
-This is a filetype plugin for CSV files. It was heavily influenced by
-the Vim Wiki Tip667 (http://vim.wikia.com/wiki/VimTip667), though it
-works differently. For instructions on installing this file, type
-:help add-local-help |add-local-help| inside Vim. For a screenshot, of
-how the plugin can be used, see http://www.256bit.org/~chrisbra/csv.gif
-
-It will make use of the |+vartabs| feature for tab delimited files to arrange
-them automatically.
-
-==============================================================================
-2. Installation *csv-installation*
-
-In order to have vim automatically detect csv files, you need to have
-|ftplugins| enabled (e.g. by having this line in your |.vimrc| file: >
-
- :filetype plugin on
-
-<
-The plugin already sets up some logic to detect CSV files. By default,
-the plugin recognizes *.csv and *.dat files as CSV filetype. In order that the
-CSV filetype plugin is loaded correctly, vim needs to be enabled to load
-|filetype-plugins|. This can be ensured by putting a line like this in your
-|.vimrc|: >
- :filetype plugin on
-<
-(see also |filetype-plugin-on|).
-
-In case this did not work, you need to setup vim like this:
-
-To have Vim automatically detect csv files, you need to do the following.
-
- 1) Create your user runtime directory if you do not have one yet. This
- directory needs to be in your 'runtime' path. In Unix this would
- typically the ~/.vim directory, while in Windows this is usually your
- ~/vimfiles directory. Use :echo expand("~") to find out, what Vim thinks
- your user directory is.
- To create this directory, you can do: >
-
- :!mkdir ~/.vim
-<
- for Unix and >
-
- :!mkdir ~/vimfiles
-<
- for Windows.
-
- 2) In that directory you create a file that will detect csv files. >
-
- if exists("did_load_csvfiletype")
- finish
- endif
- let did_load_csvfiletype=1
-
- augroup filetypedetect
- au! BufRead,BufNewFile *.csv,*.dat setfiletype csv
- augroup END
-<
- You save this file as "filetype.vim" in your user runtime diretory: >
-
- :w ~/.vim/filetype.vim
-<
- 3) To be able to use your new filetype.vim detection, you need to restart
- Vim. Vim will then load the csv filetype plugin for all files whose
- names end with .csv.
-
-==============================================================================
-3. Commands *csv-commands*
-
-The CSV ftplugin provides several Commands. All commands are also provided
-with the prefix :CSV (e.g. |:CSVNrColumns|)
-
- *:CSVWhatColumn*
-3.1 WhatColumn *WhatColumn_CSV*
---------------
-
-If you would like to know, on which column the cursor is, use >
- :WhatColumn
-<
-or >
- :CSVWhatColumn
-<
-Use the bang attribute, if you have a heading in the first line and you want
-to know the name of the column in which the cursor is: >
- :WhatColumn!
-<
- *:CSVNrColumns*
-3.2 NrColumns *NrColumns_CSV*
---------------
-
-`:NrColumns` and `:CSVNrColumns` outputs the maximum number of columns
-available. It does this by testing the first 10 lines for the number of
-columns. This usually should be enough. If you use the '!' attribute, it
-outputs the number of columns in the current line.
-
- *:CSVSearchInColumn*
-3.3 SearchInColumn *SearchInColumn_CSV*
-------------------
-
-Use `:SearchInColumn` or `:CSVSearchInColumn` to search for a pattern within a
-specific column. The usage is: >
-
- :SearchInColumn [<nr>] /{pat}/
-<
-
-So if you would like to search in Column 1 for the word foobar, you enter >
-
- :SearchInColumn 1 /foobar/
-
-Instead of / as delimiter, you can use any other delimiter you like. If you
-don't enter a column, the current column will be used.
-
- *:CSVHiColumn*
-3.4 HiColumn *HiColumn_CSV*
-------------
-
-`:HiColumn` or `:CSVHiColumn` <nr> can be used to highlight Column <nr>.
-Currently the plugin uses the WildMenu Highlight Group. If you would like to
-change this, you need to define the variable |g:csv_hiGroup|.
-
-If you do not specify a <nr>, HiColumn will highlight the column on which the
-cursor is. Use >
-
- :HiColumn!
-
-to remove any highlighting.
-
-If you want to automatically highlight a column, see |csv-hicol|
-
- *:ArrangeColumn* *:CSVArrangeColumn*
-3.5 ArrangeColumn *ArrangeColumn_CSV*
------------------
-
-If you would like all columns to be visually arranged, you can use the
-`:ArrangeColumn` or `:CSVArrangeColumn` command: >
-
- :[range]ArrangeColumn[!] [<Row>]
-
-Beware, that this will change your file and depending on the size of
-your file may slow down Vim significantly. This is highly experimental.
-:ArrangeCommand will try to vertically align all columns by their maximum
-column size. While the command is run, a progressbar in the statusline 'stl'
-will be shown.
-
-Use the bang attribute to force recalculating the column width. This is
-slower, but especially if you have modified the file, this will correctly
-calculate the width of each column so that they can be correctly aligned. If
-no column width has been calculated before, the width will be calculated, even
-if the '!' has not been given.
-
-If <Row> is given, will use the Row, to calculate the width, else will
-calculate the maximum of at least the first 10,000 rows to calculate the
-width. The limit of 10,000 is set to speed up the processing and can be
-overriden by setting the "b:csv_arrange_use_all_rows" variable (see below).
-
-If [range] is not given, it defaults to the current line.
-
- *csv_arrange_align*
-By default, the columns will be right-aligned. If you want a different
-alignment you need to specify this through the b:csv_arrange_align variable.
-This is a string of flags ('r': right align, 'l': left align, 'c': center
-alignment, '.': decimal alignment) where each flag defines the alignment for
-a particular column (starting from left). Missing columns will be right aligned.
-You can use '*' to repeat the previous value until the end.
-So this: >
-
- :let b:csv_arrange_align = 'lc.'
-<
-Will left-align the first column, center align the second column, decimal
-align the third column and all following columns right align. (Note: decimal
-aligning might slow down Vim and additionally, if the value is no decimal
-number it will be right aligned).
-And this: >
-
- :let b:csv_arrange_align = 'l*'
-
-Will left align all columns.
-
-If you change the alignment parameter, you need to use the "!" attribute, the
-next time you run the |:ArrangeCol| command, otherwise for performance
-reasons, it won't be considered.
-
-Note, arranging the columns can be very slow on large files or many columns (see
-|csv-slow| on how to increase performance for this command). For large files,
-calculating the column width can take long and take a considerable amount of
-memory. Therefore, the csv plugin will at most check 10.000 lines for the
-width. Set the variable b:csv_arrange_use_all_rows to 1 to use all records: >
-
- :let b:csv_arrange_use_all_rows = 1
-<
-(this could however in the worst case lead to a crash).
-
-To disable the statusline progressbar set the variable g:csv_no_progress: >
-
- :let g:csv_no_progress = 1
-<
-This will disable the progressbar and slightly improve performance (since no
-additional redraws are needed).
-
-Note: this command does not work for fixed width columns |csv-fixedwidth|
-
-See also |csv-arrange-autocmd| on how to have vim automatically arrange a CSV
-file upon entering it.
-
-By default, all lines in the file are considered to calculate the column width.
-If you want to ignore some lines at the beginning of the file, set the global
-variable g:csv_skipfirst to the number of lines to be ignored, e.g. the first
-line of the file can be ignored with >
-
- :let g:csv_skipfirst = 1
-<
-Then use the '!' to force recalculation of column width when applying
-:ArrangeColumn
-
- *:CSVUnArrangeColumn*
-3.6 UnArrangeColumn *UnArrangeColumn_CSV*
------------------
-
-If you would like to undo a previous :ArrangeColumn command, you can use this
-`:UnArrangeColumn` or `:CSVUnArrangeColumn` command: >
-
- :[range]UnArrangeColumn
-
-Beware, that is no exact undo of the :ArrangeColumn command, since it strips
-away all leading blanks for each column. So if previously a column contained
-only some blanks, this command will strip all blanks.
-
-If [range] is given, it defaults to the current line.
-
- *:CSVDeleteColumn*
-3.7 DeleteColumn *DeleteColumn_CSV*
-----------------
-
-The command `:DeleteColumn` or `:CSVDeleteColumn` can be used to delete a specific column. >
-
- :DeleteColumn 2
-
-will delete column 2. If you use `:DeleteColumn 2-3` columns 2 and 3 will be
-deleted.
-
-If you don't specify a column number, it will delete the column on which the
-cursor is. Alternatively, you can also specify a search string. The plugin
-will then delete all columns that match the pattern: >
-
- :DeleteColumn /foobar
-<
-will delete all columns where the pattern "foobar" matches.
-
- *:CSVInit*
- *:InitCSV*
-3.8 CSVInit
------------
-Reinitialize the Plugin. Use this, if you have changed the configuration
-of the plugin (see |csv-configuration| ).
-If you use the bang (!) attribute, it will keep the b:delimiter configuration
-variable.
-
- *:CSVHeader*
-3.9 Header lines *Header_CSV*
-----------------
-The `:Header` or `:CSVHeader` command splits the csv-buffer and adds a window,
-that holds a small fraction of the csv file. This is useful, if the first line
-contains some kind of a heading and you want always to display it. This works
-similar to fixing a certain line at the top. As optional argument, you can
-give the number of columns from the top, that shall be displayed. By default,
-1 is used (You can define your own default by setting the b:csv_headerline
-variable, see |csv-header|). Use the '!' to close this window. So this >
-
- :Header 3
-
-opens at the top a split window, that holds the first 3 lines, is fixed
-and horizontally 'scrollbind'ed to the csv window and highlighted using the
-CSVHeaderLine highlighting.
-To close the header window, use >
-
- :Header!
-
-Note, this won't work with linebreaks in the column.
-
-Note also, that if you already have a horizontal header window (|VHeader_CSV|),
-this command will close the horizontal Header window. This is because of a
-limitation of Vim itself, which doesn't allow to sync the scrolling between
-two windows horizontally and at the same time have another window only sync
-its scrolling vertically.
-
-Note: this command does not work for fixed width columns |csv-fixedwidth|
-
- *:CSVVHeader* *VHeader_CSV*
-If you want a vertical header line, use `:VHeader` or `:CSVVHeader`. This works
-similar to the |Header_CSV| command, except that it will open a vertical split
-window with the first column always visible. It will always open the first
-column in the new split window. Use the '!' to close the window. If you
-specify a count, that many columns will be visible (default: the first). Add
-the bang to the count, if you only want the specific column to be visible.
->
- :VHeader 2
-<
-This will open a vertical split window containing the first 2 columns, while
->
- :VHeader 2!
-<
-Opens a new vertical split window containing only the 2 second column.
-
-Note, this won't work with linebreaks in the column.
-Note also: this command does not work for fixed width columns |csv-fixedwidth|
-
-
- *:CSVVHeaderToggle* *:CSVHeaderToggle*
- *VHeaderToggle_CSV* *HeaderToggle_CSV*
-Use the `:HeaderToggle` and `:VHeaderToggle` command to toggle displaying the
-horizontal or vertical header line. Alternatively, use `:CSVHeaderToggle` or
-`:CSVVHeaderToggle`
-
-
- *:CSVSort*
-3.10 Sort *Sort_CSV*
----------
-The command `:Sort` or `:CSVSort` can be used to sort the csv file on a
-certain column. If no range is given, is sorts the whole file. Specify the
-column number to sort on as argument. Use the '!' attribute to reverse the
-sort order. For example, the following command sorts line 1 til 10 on the 3
-column >
-
- :1,10Sort 3
-
-While this command >
-
- :1,10Sort! 3
-
-reverses the order based on column 3.
-
-The column number can be optionally followed by any of the flags [i], [n],
-[x] and [o] for [i]gnoring case, sorting by [n]umeric, he[x]adecimal
-or [o]ctal value.
-
-When no column number is given, it will sort by the column, on which the
-cursor is currently.
-
- *:CSVColumn*
-3.11 Copy Column *Copy_CSV*
-----------------
-If you need to copy a specific column, you can use the command `:CSVColumn` or
-`:Column` >
-
- :[N]Column [a]
-
-Copy column N into register a. This will copy all the values, that are
-not folded-away (|csv-filter|) and skip comments.
-
-If you don't specify N, the column of the current cursor position is used.
-If no register is given, the default register
-|quotequote| is used.
-
- *:CSVMoveCol*
-3.12 Move A Column *MoveCol_CSV*
-------------------
-You can move one column to the right of another column by using the
-`:CSVMoveColumn` or `:MoveColumn` command >
-
- :[range]MoveColumn [source] [dest]
-
-This moves the column number source to the right of column nr destination. If
-both arguments are not given, move the column on which the cursor is to the
-right of the current last column. If [range] is not given, MoveColumn moves
-the entire column, otherwise, it moves the columns only for the lines within
-the range, e.g. given that your first line is a header line, which you don't
-want to change >
-
- :2,$MoveColumn 1 $
-
-this would move column 1 behind the last column, while keeping the header line
-as is.
-
-
- *:CSVSumCol*
-3.13 Sum of a Column *SumCol_CSV*
---------------------
-You can let Vim output the sum of a column using the `:CSVSumCol` or `:SumCol`
-command >
-
- :[range]SumCol [nr] [/format/]
-
-This outputs the result of the column <nr> within the range given. If no range
-is given, this will calculate the sum of the whole column. If <nr> is not
-given, this calculates the sum for the column the cursor is on. Note, that the
-delimiter will be stripped away from each value and also empty values won't be
-considered.
-
-By default, Vim uses the a numerical format that uses the '.' as decimal
-separator while there is no thousands separator. If youre file contains
-the numbers in a different format, you can use the /format/ option to specify
-a different thousands separator or a different decimal separator. The format
-needs to be specified like this:
- /x:y/
-where 'x' defines the thousands separator and y defines the decimal
-separator and each one is optional. This means, that >
-
- :SumCol 1 /:,/
-
-uses the default thousands separator and ',' as the decimal separator and >
-
- :SumCol 2 / :./
-
-uses the Space as thousands separator and the '.' as decimal separator.
-
-Note, if you Vim is compiled without floating point number format (|+float|),
-Vim will only aggregate the integer part and therefore won't use the 'y'
-argument in the /format/ specifier.
-
-See also |csv-aggregate-functions|
-
- *:CSVNewRecord*
-3.14 Create new Records *NewRecord_CSV*
------------------------
-If you want to create one or several records, you can use the `:NewRecord` or
-`:CSVNewRecord` command: >
-
- :[range]NewRecord [count]
-
-This will create in each line given by range [count] number of new empty
-records. If [range] is not specified, creates a new line below the line the
-cursor is on and if count is not given, it defaults to 1.
-
-
- *:CSVNewDelimiter*
-3.15 Change the delimiter *NewDelimiter_CSV*
--------------------------
-If you want to change the field delimiter of your file you can use the
-`:CSVNewDelimiter` or `:NewDelimiter` command: >
-
- :NewDelimiter char
-
-This changes the field delimiter of your file to the new delimiter "char".
-Note: Will remove trailing delimiters.
-
- *:CSVDuplicate*
-3.16 Check for duplicate records *Duplicate_CSV*
---------------------------------
-If you want to check the file for duplicate records, use the command
-`:Duplicate` or `:CSVDuplicate`: >
-
- :Duplicate columnlist
-<
-
-Columnlist needs to be a numeric comma-separated list of all columns that you
-want to check. You can also use a range like '2-5' which means the plugin
-should check columns 2,3,4 and 5.
-
-If the plugin finds a duplicate records, it outputs its line number (but it
-only does that at most 10 times).
-
-3.17 Normal mode commands *csv-mapping*
--------------------------
-The csv filetype plugin redefines the following keys (in normal Mode) as:
-
-<C-Right> or L or W Move [count] field forwards
-
-<C-Left> or E or H Move [count] field backwards (but see |csv-mapping-H|
- for the movement of H).
-
-<Up> or K Move [count] lines upwards within the same column
-
-<Down> or J Move [count] lines downwards within the same column
-
-The upwards and downwards motions try to keep the cursor in the relative
-position within the cell when changing lines. That is not a guaranteed to work
-and will fail if the upper/lower cell is of a different width than the
-starting cell.
-
-<Enter> Dynamically fold all lines away, that don't match
- the value in the current column. See |csv-filter|
-
- In |Replace-mode| and |Virtual-Replace-mode| does not
- create a new row, but instead moves the cursor to the
- beginning of the same column, one more line below.
-
-<Space> Dynamically fold all lines away, that match
- the value in the current column. See |csv-filter|
-
-<BS> Remove last item from the dynamic filter.
- See |csv-filter|
-
- *csv-mapping-H*
-Note how the mapping of 'H' differs from 'E'
-
-H step fields backwards but also stops at where the content of the columns
-begins.
-
-If you look into this example (with the cursor being '|')
-
- aaa, bbbb,|ccc `
-
-Pressing 'H' moves to
-
- aaa, |bbbb,ccc `
-
-Pressing 'H' again moves to
-
- aaa,| bbbb,ccc `
-
-Pressing 'H' again moves to
-
- |aaa, bbbb,ccc `
-
-While with 'E', the cursor moves to:
-
- aaa,| bbbb,ccc `
-
-and pressing 'E' again, it would move directly to
-
- |aaa, bbbb,ccc `
-
- *csv-textobjects*
-Also, the csv plugin defines these text-object:
-
-if Inner Field (contains everything up to the delimiter)
-af Outer Field (contains everything up to and including
- the delimiter)
-iL Inner Line (visually linewise select all lines, that
- has the same value at the cursor's column)
-
-Note, that the <BS>, <CR>, K and J overlap Vim's default mapping for |<CR>|,
-|<BS>|, |J| and |K| respectively. Therefore, this functionality has been
-mapped to a sane default of <Localleader>J and <LocalLeader>K. If you haven't
-changed the |<Leader>| or |<LocalLeader>| variables, those the <Localleader>
-is equival to a single backslash '\', e.g. \K would run the lookup function on
-the word under the cursor and \J would join this line with the previous line.
-
-If you want to prevent the mapping of keys, simply set the global variable
-g:csv_nomap_<key> to 1, (remove the special characters `<>` and replace `-` by
-`_`), e.g. to prevent mapping of <CR> and <C-Left> in csv files, put >
-
- let g:csv_nomap_cr = 1
- let g:csv_nomap_c_left = 1
-<
-into your |.vimrc|. Note, the keyname must be lower case.
-
-Also the csv plugins follows the general consensus, that when the variable
-g:no_plugin_maps or g:no_csv_maps is set, no key will be mapped.
-
-
- *:CSVConvertData* *ConvertData_CSV*
-3.18 Converting a CSV File *csv-convert*
---------------------------
-You can convert your CSV file to a different format with the `:ConvertData`
-or `:CSVConvertData` command >
-
- ConvertData
-
-Use the the ! attribute, to convert your data without the delimiter.
-
-This command will interactively ask you for the definition of 3 variables.
-After which it will convert your csv file into a new format, defined by those
-3 variables and open the newly created file in a new window. Those 3 variables
-define how the text converted.
-
-First, You need to define what has to be done, before converting your column
-data. That is done with the "pre convert" variable. The content of this
-variable will be put in front of the new document.
-
-Second, you define, what has to be put after the converted content of your
-column data. This happens with the "post convert" variable. Basically the
-contents of this variable will be put after processing the columns.
-
-Last, the columns need to be converted into your format. For this you can
-specify a printf() format like string, that defines how your data will be
-converted. You can use '%s' to specify placeholders, which will later be
-replaced by the content of the actual column.
-
-For example, suppose you want to convert your data into HTML, then you first
-call the >
-
- :ConvertData
-
-At this point, Vim will ask you for input. First, you need to specify, what
-needs to be done before processing the data:
-
- Pre convert text: <html><body><table> `
-
-This would specify to put the HTML Header before the actual data can be
-processed. If the variable g:csv_pre_convert is already defined, Vim will
-already show you its' content as default value. Simply pressing Enter will use
-this data. After that, Vim asks, what the end of the converted file needs to
-look like:
-
- Post convert text: </table></body></html> `
-
-So here you are defining how to finish up the HTML file. If the variable
-g:csv_post_convert is already defined, Vim will already show you its' content
-as default value which you can confirm by pressing Enter. Last, you define,
-how your columns need to be converted. Again, Vim asks you for how to do that:
-
- Converted text, use %s for column input: `
- <tr><td>%s</td><td>%s</td><td>%s</td></tr>
-
-This time, you can use '%s' expandos. They tell Vim, that they need to be
-replaced by the actual content of your file. It does by going from the first
-column in your file and replacing it with the corresponding %s in that order.
-If there are less '%s' expandos than columns in your file, Vim will skip the
-columns, that are not used. Again If the variable g:csv_convert is already
-defined, Vim will already show you its' content as default value which you can
-confirm by pressing Enter.
-
-After you hit Enter, Vim will convert your data and put it into a new window.
-It may look like this:
-
- <html><body><table> `
- <tr><td>1,</td><td>2,</td><td>3,</td></tr> `
- <tr><td>2,</td><td>2,</td><td>4,</td></tr> `
- </table></body></html> `
-
-Note, this is only a proof of concept. A better version of converting your
-data to HTML is bundled with Vim (|:TOhtml|).
-
-But may be you want your data converted into SQL-insert statements. That could
-be done like this: >
-
- ConvertData!
-<
- Pre convert text: `
-
-(Leave this empty. It won't be used).
-
- Post convert text: Commit; `
-
-After inserting the data, commit it into the database.
-
- Converted text, use %s for column input: `
- Insert into table foobar values ('%s', '%s', %s); `
-
-Note, that the last argument is not included within single quotation marks,
-since in this case the data is assumed to be integer and won't need to be
-quoted for the database.
-
-After hitting Enter, a new Window will be opened, which might look like this:
-
- Insert into table foobar values('Foobar', '2', 2011); `
- Insert into table foobar values('Bar', '1', 2011); `
- Commit; `
-
-Since the command was used with the bang attribute (!), the converted data
-doesn't include the column delimiters.
-
-Now you can copy it into your database, or further manipulate it.
-
-3.19 Dynamic filters *csv-filter*
---------------------
-If you are on a value and only want to see lines that have the same value in
-this column, you can dynamically filter the file and fold away all lines not
-matching the value in the current column. To do so, simply press <CR> (Enter).
-Now Vim will fold away all lines, that don't have the same value in this
-particular row. Note, that leading blanks and the delimiter is removed and the
-value is used literally when comparing with other values. If you press <Space>
-on the value, all fields having the same value will be folded away.
-Pressing <BS> will remove the last item from the dynamic filter. To remove all
-filters, keep pressing <BS> until no more filters are present.
-
-The way this is done is, that the value from the column is extracted and a
-regular expression for that field is generated from it. In the end this
-regular expression is used for folding the file.
-
-A subsequent <CR> or <Space> on another value, will add this value to the
-current applied filter (this is like using the logical AND between the
-currently active filter and the new value). To remove the last item from the
-filter, press <BS> (backspace). If all items from the filter are removed,
-folding will be disabled.
-
-If some command messes up the folding, you can use |zX| to have the folding
-being reinitialized.
-
-By default, the first line is assumed to be the header and won't be folded
-away. See also |csv-header|.
-
-If you have set the g:csv_move_folds variable and the file is modifiable, all
-folded lines will be moved to the end of the file, so you can view all
-non-folded lines as one consecutive area (see also |csv-move-folds|)
-
- *:CSVFilter* *:Filter* *Filter_CSV*
-To see the active filters, you can use the `:Filter` or `:CSVFilter` command.
-This will show you a small summary, of what filters are active and looks like
-this:
-
-Nr Match Col Name Value ~
-===================================================== `
-01 - 07 Price 23.10 `
-02 + 08 Qty 10 `
-
-This means, there are two filters active. The current active filter is on
-column 7 (column name is Price) and all values that match 23.10 will be folded
-away AND all values that don't match a value of 10 in the QTY column will also
-be folded away.
-When removing one item from the filter by pressing <BS>, it will always remove
-the last item (highest number in NR column) from the active filter values.
-
-Note, that depending on your csv file and the number of filters you used,
-applying the filter might actually slow down vim, because a complex regular
-expression is generated that is applied by the fold expression. Look into the
-@/ (|quote_/|) register to see its value.
-
-Use |zX| to apply the current value of your search register as filter. Use >
-
- :Filters!
-
-to reapply all values from the current active filter and fold non-matching
-items away.
-
- *:CSVAnalyze* *Analyze_CSV*
-3.20 Analyze a Column *csv-analyze*
----------------------
-If you'd like to know, how the values are distributed among a certain column,
-you can use the `:CSVAnalyze` or `:Analyze` command. So >
-
- :Analyze 3
-
-outputs the the distribution of the top 5 values in column 3. This looks like
-this:
-
-Nr Count % Value ~
-============================= `
-01 20 50% 10 `
-02 10 25% 2 `
-03 10 25% 5 `
-
-This tells you, that the the value '10' in column 3 occurs 50% of the time
-(exactly 20 times) and the other 2 values '2' and '5' occur only 10 times, so
-25% of the time.
-
-In addition, a second argument may be used to specify the number of top values.
-So
-
- :Analyze 3 10
-
-outputs the the distribution of the top 10 values in column 3, respectively.
-
- *:CSVVertFold* *VertFold_CSV*
-3.21 Vertical Folding *csv-vertfold*
----------------------
-Sometimes, you want to hide away certain columns to better view only certain
-columns without having to horizontally scroll. You can use the `:CSVVertFold`
-or `:VertFold` command to hide certain columns: >
-
- :VertFold [<nr>]
-<
-This will hide all columns from the first until the number entered. It
-currently can't hide single columns, because of the way, syntax highlighting
-is used. This command uses the conceal-feature |:syn-conceal| to hide away
-those columns. If no nr is given, hides all columns from the beginning till
-the current column.
-
-Use >
- :VertFold!
-
-to display all hidden columns again.
-
- *:CSVTranspose* *Transpose_CSV*
-3.22 Transposing a column *csv-transpose*
--------------------------
-Transposing means to exchange rows and columns. You can transpose the csv
-file, using the `:CSVTranspose` or `:Transpose` : >
-
- :[range]Transpose
-<
-command. If [range] is not given, it will transpose the complete file,
-otherwise it will only transpose the lines in the range given. Note, comments
-will be deleted and transposing does not work with fixed-width columns.
-
- *:CSVTabularize*
-3.23 Transforming into a table *:CSVTable* *csv-tabularize*
-------------------------------
-You can also transform your csv data into a visual table, using the
-`:CSVTabularize` or `:CSVTable`: >
-
- :CSVTabularize
-<
-command. This will make a frame around your csv data and substitute all
-delimiters by '|', so that it will look like a table.
-
-e.g. consider this data: >
->
-First,Second,Third ~
-10,5,2 `
-5,2,10 `
-2,10,5 `
-10,5,2 `
-
-This will be transformed into: >
-
- |---------------------|
- | First| Second| Third|
- |------|-------|------|
- | 10| 5| 2|
- | 5| 2| 10|
- | 2| 10| 5|
- | 10| 5| 2|
- |---------------------|
-
-If your Vim uses an unicode 'encoding', the plugin makes a nice table using
-special unicode drawing glyphs (but it might be possible, that those chars are
-not being displayed correctly, if either your terminal or the gui font doesn't
-have characters for those codepoints). If you use the bang form, each row will
-be separated by a line.
-You can also visual select a range of lines and use :Tabularize to have only
-that range converted into a nice ascii table. Else it try to use the current
-paragraph and try to transform it.
-
-If you use the '!' bang argument, between each row, a line will be drawn.
-
-In csv files, you can also use the :CSVTabularize command, in different
-filetypes you can use the :CSVTable command (and is available as plugin so it
-will be available for non-CSV filetypes).
-
-Set the variable g:csv_table_leftalign=1 if you want the columns to be
-leftaligned.
-
-Note: Each row must contain exactly as many fields as columns.
-
-This command is available as default plugin. To disable this feature, set the
- variable g:csv_disable_table_command to 1: >
-
- :let g:csv_disable_table_command = 1
-<
- *:CSVAddColumn*
-3.24 Add new empty columns *AddColumn_CSV*
---------------------------
-If you want to add new empty columns to your file you can use the
-`:CSVAddColumn` or `:AddColumn` command: >
-
- :[range]AddColumn [column] [count]
-
-By default, this works for the whole file, but you can give a different range
-to which the AddColumn command applies. If no arguments are given, the new
-empty column will be added after the column on which the cursor is. You can
-however add as first argument the column number after which the new column
-needs to be added.
-
-Additionally, you can also add a count number to add several columns at once
-after the specified column number. Use 0 for the column number, if you want to
-add several columns after the current column.
-
- *:CSVSubstitute*
-3.25 Substitute in columns *Substitute_CSV*
---------------------------
-If you want to substitute only in specific columns, you can use the
-`:CSVSubstitute` or `:Substitute` command: >
-
- :[range]Substitute [column/]pattern/string[/flags]
-
-This means in the range and within the given columns replace pattern by
-string. This works basically like the |:s| command, except that you MUST use
-forward slashes / to delimit the command. The optional part `[column/]` can
-take either the form of an address or if you leave it out, substitution will
-only happen in the current column. Additionally, you can use the `1,5/` form
-to substitute within the columns 1 till 5 or you can even use `1,$` which
-means to substitute in each column (so in fact this simplifies to a simple
-`:s` command whithin the given range. For the use of `[/flags]` see |:s_flags|
-Here are some examples: >
-
- :%Substitute 1,4/foobar/baz/gce
-
-Substitutes in the whole file in columns 1 till 4 the pattern foobar by baz
-for every match ('g' flag) and asks for confirmation ('c' flag).
-
- :%S 3,$/(\d\+)/\1 EUR/g
-
-Substitutes in each column starting from the third each number and appends the
-EURO suffix to it.
-
-3.26 Count Values inside a Column *Count_CSV*
----------------------------------
-You can let Vim output the number of values inside a column using the `:CSVCountCol`
-command >
-
- :[range]CountCol [nr] [distinct]
-
-This outputs the number of [distinct] values visible in the column [nr]
-If [distinct] is not given, count's all values. Note, header rows and folded
-rows won't be counted.
-
-The result is also available in the buffer-local variable `b:csv_result`.
-
-See also |csv-aggregate-functions|
-
-3.27 Maximum/Minimum value of a Column *MaxCol_CSV* *MinCol_CSV*
----------------------------------------
-You can let Vim output the 10 maximum/minimum values of a column using the
-`:CSVMaxCol` command >
-
- :[range]MaxCol [nr][distinct] [/format/]
- :[range]MinCol [nr][distinct] [/format/]
-
-This outputs the result of the column <nr> within the range given. If no range
-is given, this will calculate the max value of the whole column. If <nr> is not
-given, this calculates the sum for the column the cursor is on. Note, that the
-delimiter will be stripped away from each value and also empty values won't be
-considered.
-
- *format_number_csv*
-By default, Vim uses the a numerical format that uses the '.' as decimal
-separator while there is no thousands separator. If youre file contains
-the numbers in a different format, you can use the /format/ option to specify
-a different thousands separator or a different decimal separator. The format
-needs to be specified like this:
- /x:y/
-where 'x' defines the thousands separator and y defines the decimal
-separator and each one is optional. This means, that >
-
- :MaxCol 1 /:,/
-
-uses the default thousands separator and ',' as the decimal separator and >
-
- :MaxCol 2 / :./
-
-uses the Space as thousands separator and the '.' as decimal separator.
-
-If [distinct] is given, only returns the number of distinct values.
-
-The result is also available in the buffer-local variable `b:csv_result`.
-
-3.28 Average value of a Column *AvgCol_CSV*
-------------------------------
-You can let Vim output the value of a column using the `:CSVAvgCol` command >
-
- :[range]AvgCol [nr] [/format/]
-
-This outputs the result of the column <nr> within the range given. If no range
-is given, this will calculate the average value of the whole column. If <nr> is not
-given, this calculates the sum for the column the cursor is on. Note, that the
-delimiter will be stripped away from each value and also empty values won't be
-considered.
-
-For the [/format/] part, see |format_number_csv|.
-
-The result is also available in the buffer-local variable `b:csv_result`.
-
-See also |csv-aggregate-functions|
-
-3.29 Variance of a Column *VarCol_CSV* *SmplVarCol* *PopVarCol*
-_________________________
-
- :[range]PopVarCol [nr] [/format/]
-
- :[range]SmplVarCol [nr] [/format/]
-
-Calculate the Population or Sample Variance for the specified column.
-
-This outputs the result of the column `<nr>` within the range given. If no range
-is given, this will calculate the statistical variance of the whole column. If <nr> is not
-given, this calculates the variance for the column the cursor is on. Note, that the delimiter
-will be stripped away from each value and also empty values won't be considered.
-
-The result is also available in the buffer-local variable `b:csv_result`.
-
-For the [/format/] part, see |format_number_csv|.
-
-3.30 Standard Deviation of a Column *StdDevCol_CSV* *PopStdCol* *SmplStdCol*
-___________________________________
-
- :[range]PopStdCol [nr] [/format/]
-
- :[range]SmplStdCol [nr] [/format/]
-
-Calculate the Population or Sample Standard Deviation for the specified column.
-
-This outputs the result of the column `<nr>` within the range given. If no range
-is given, this will calculate the standard deviation of the whole column. If <nr> is not
-given, this calculates the standard deviation for the column the cursor is on. Note, that
-the delimiter will be stripped away from each value and also empty values won't be considered.
-
-The result is also available in the buffer-local variable `b:csv_result`.
-
-For the [/format/] part, see |format_number_csv|.
-
- *:CSVDupColumn*
-3.31 Duplicate columns *DupColumn_CSV*
-----------------------
-If you want to add duplicate an existing column you can use the
-`:CSVDupColumn` or `:DupColumn` command: >
-
- :[range]DupColumn [column] [count]
-
-By default, this works for the whole file, but you can give a different range
-to which the command applies. By default it will duplicate the column on which
-the cursor is, but you can add as first argument which column will be duplicated.
-
-Additionally, you can also provide a count to copy several columns at once.
-
- *ColumnWidth_CSV*
-3.32 Column Width *:CSVColumnWidth*
------------------
-If you want to know the width of each column, you can use the `:CSVColumnWidth` command: >
-
- :CSVColumnWidth
-
-This will output the width for each column at the bottom. See also
-|CSVWidth()| function
-
-3.33 Sum of Numbers in a Row *SumRow_CSV*
-----------------------------
-You can let Vim output the sum of a field in a row using the `:CSVASumRow` command >
-
- :[range]SumRow [/format/]
-
-This outputs the sum of the row [range]. If no range is given, this will
-calculate the sum for the current row. Note, that the delimiter will be
-stripped away from each value and also empty values won't be considered.
-
-For the [/format/] part, see |format_number_csv|
-==============================================================================
-4. CSV Configuration *csv-configuration*
-
-The CSV plugin tries to automatically detect the field delimiter for your
-file, cause although often the file is called CSV (comma separated values), a
-semicolon is actually used. By default the plugin tries the following
-delimiters: ',', ';', '|', '\t', '^', ':'.
-The column separator is stored in the buffer-local variable b:delimiter. This
-delimiter is heavily used, because you need it to define a column. Almost all
-commands use this variable therefore.
-
-4.1 Delimiter *csv-delimiter*
--------------
-To override the automatic detection of the delimiter and define the separator
-manually, use: >
-
- :let g:csv_delim=','
-
-to let the comma be the delimiter. This sets the buffer local delimiter
-variable b:delimiter.
-
-You can also set default delimiter to prevent a warning if no delimiter can
-be detected: >
-
- :let g:csv_default_delim=','
-
-If your file does not consist of delimited columns, but rather is a fixed
-width csv file, see |csv-fixedwidth| for configuring the plugin appropriately.
-
-If you changed the delimiter, you should reinitialize the plugin using
-|InitCSV|
-
-Note: the delimiter will be used to generate a regular expression that matches
-a column. Internally the plugin uses the very-nomagic setting for the
-delimiter, so escaping is not neccessary.
-
-If you want to override which delimiters are probed automatically, set the
-g:csv_delim_test variable like this: >
- :let g:csv_delim_test = ',;|'
-
-This will only make the plugin test the possible delimiters ',', ';' and '|'.
-This will also make the automatic detection a bit faster, since it does not
-need to test that many delimiters.
-
-4.2 Column *csv-column*
-----------
-The definition, of what a column is, is defined as buffer-local variable
-b:col. By default this variable is initialized to: >
-
- let b:col='\%(\%([^' . b:delimiter . ']*"[^"]*"[^' . b:delimiter . ']*'
- \. b:delimiter . '\)\|\%([^' . b:delimiter . ']*\%(' . b:delimiter
- \. '\|$\)\)\)'
-
-This should take care of quoted delimiters within a column. Those should
-obviously not count as a delimiter. This regular expression is quite
-complex and might not always work on some complex cases (e.g. linebreaks
-within a field, see RFC4180 for some ugly cases that will probably not work
-with this plugin).
-
-If you changed the b:delimiter variable, you need to redefine the b:col
-variable, cause otherwise it will not reflect the change. To change the
-variable from the comma to a semicolon, you could call in your CSV-Buffer
-this command: >
-
- :let b:col=substitute(b:col, ',', ';', 'g')
-
-Check with :echo b:col, if the definition is correct afterwards.
-
-You can also force the plugin to use your own defined regular expression as
-column. That regular expression should include the delimiter for the columns.
-To define your own regular expression, set the g:csv_col variable: >
-
- let g:csv_col='[^,]*,'
-
-This defines a column as a field delimited by the comma (where no comma can be
-contained inside a field), similar to how |csv-strict| works.
-
-You should reinitialize the plugin afterwards |InitCSV|
-
-4.3 Highlighting Group *csv-higroup*
-----------------------
-By default the csv ftplugin uses the WildMenu highlighting Group to define how
-the |HiColumn| command highlights columns. If you would like to define a
-different highlighting group, you need to set this via the g:csv_hiGroup
-variable. You can e.g. define it in your |.vimrc|: >
-
- :let g:csv_hiGroup = "IncSearch"
-
-You need to restart Vim, if you have changed this variable or use |InitCSV|
-
-The |hl-Title| highlighting is used for the Header line that is created by the
-|Header_CSV| command. If you prefer a different highlighting, set the
-g:csv_hiHeader variable to the prefered highlighting: >
-
- let g:csv_hiHeader = 'Pmenu'
-<
-This would set the header window to the |hl-Pmenu| highlighting, that is used
-for the popup menu. To disable the custom highlighting, simply |unlet| the
-variable: >
-
- unlet g:csv_hiHeader
-
-You should reinitialize the plugin afterwards |InitCSV|
-
-4.4 Strict Columns *csv-strict*
-------------------
-The default regular expression to define a column is quite complex
-(|csv-column|). This slows down the processing and makes Vim use more memory
-and it could still not fit to your specific use case.
-
-If you know, that in your data file, the delimiter cannot be contained inside
-the fields quoted or escaped, you can speed up processing (this is quite
-noticeable when using the |ArrangeColumn_CSV| command) by setting the
-g:csv_strict_columns variable: >
-
- let g:csv_strict_columns = 1
-
-This would define a column as this regex: >
-
- let b:col = '\%([^' . b:delimiter . ']*' . b:delimiter . '\|$\)'
-
-Much simpler then the default column definition, isn't it?
-See also |csv-column| and |csv-delimiter|
-
-You can disable the effect if you |unlet| the variable: >
-
- unlet g:csv_strict_columns
-
-You should reinitialize the plugin afterwards |InitCSV|
-
-For example when opening a CSV file you get the Error |E363|: pattern uses
-more memory than 'maxmempattern'. In this case, either increase the
-'maxmempattern' or set the g:csv_strict_columns variable.
-
-
-4.5 Concealing *csv-syntax* *csv-conceal*
---------------
-The CSV plugin comes with a function to syntax highlight csv files. Basically
-allt it does is highlight the columns and the header line.
-
-By default, the delimiter will not be displayed, if Vim supports |conceal| of
-syntax items and instead draws a vertical line. If you don't want that, simply
-set the g:csv_noconceal variable in your .vimrc >
-
- let g:csv_no_conceal = 1
-
-and to disable it, simply unlet the variable >
-
- unlet g:csv_no_conceal
-
-You should reinitialize the plugin afterwards |InitCSV|
-Note: You can also set the 'conceallevel' option to control how the concealed
-chars will be displayed.
-
-If you want to customize the syntax colors, you can define your own groups.
-The CSV plugin will use already defined highlighting groups, if they are
-already defined, otherwise it will define its own defaults which should be
-visible with 8, 16, 88 and 256 color terminals. For that it uses the
-CSVColumnHeaderOdd and CSVColumnHeaderEven highlight groups for syntax
-coloring the first line. All other lines get either the CSVColumnOdd or
-CSVColumnEven highlighting.
-
-In case you want to define your own highlighting groups, you can define your
-own syntax highlighting like this in your |.vimrc| >
-
- hi CSVColumnEven term=bold ctermbg=4 guibg=DarkBlue
- hi CSVColumnOdd term=bold ctermbg=5 guibg=DarkMagenta
- hi CSVColumnHeaderEven ...
- hi CSVColumnHeaderOdd ...
-
-Alternatively, you can simply link those highlighting groups to some other
-ones, you really like: >
-
- hi link CSVColumnOdd MoreMsg
- hi link CSVColumnEven Question
-<
-If you do not want column highlighting, set the variable
-g:csv_no_column_highlight to 1 >
-
- :let g:csv_no_column_highlight = 1
-<
-Note, these changes won't take effect, until you restart Vim.
-
-
-4.6 Newlines *csv-newline*
-------------
-RFC4180 allows newlines in double quoted strings. By default, the csv-plugin
-won't recognize newlines inside fields. It is however possible to make the
-plugin aware of newlines within quoted strings. To enable this, set >
-
- let g:csv_nl = 1
-
-and to disable it again, simply unset the variable >
-
- unlet g:csv_nl
-
-It is a good idea to reinitialize the plugin afterwards |InitCSV|
-
-Note, this might not work correctly in all cases. The syntax highlighting
-seems to change on cursor movements. This could possibly be a bug in the
-syntax highlighting engine of Vim. Also, |WhatColumn_CSV| can't handle
-newlines inside fields and will most certainly be wrong.
-
-4.7 Highlight column automatically *csv-hicol*
-----------------------------------
-You can let vim automatically highlight the column on which the cursor is.
-This works by defining an |CursorMoved| autocommand to always highlight the
-column, when the cursor is moved in normal mode. Note, this does not update
-the highlighting, if the Cursor is moved in Insert mode. To enable this,
-define the g:csv_highlight_column variable like this >
-
- let g:csv_highlight_column = 'y'
-
-and to disable it again, simply unset the variable >
-
- unlet g:csv_highlight_column
-
-It is a good idea to reinitialize the plugin afterwards |InitCSV|
-
-4.8 Fixed width columns *csv-fixedwidth*
------------------------
-Sometimes there are no real columns, but rather the file is fixed width with
-no distinct delimiters between each column. The CSV plugin allows you to
-handle such virtual columns like csv columns, if you define where each column
-starts.
-
-Note: Except for |ArrangeColumn_CSV| and the |Header_CSV| commands, all
-commands work in either mode. Those two commands won't do anything in the case
-of fixedwidth columns, since they don't really make sense here.
-
-4.8.1 Manual setup
-------------------
-You can do this, by setting the buffer-local variable
-b:csv_fixed_width like this >
-
- let b:csv_fixed_width="1,5,9,13,17,21"
-
-This defines that each column starts at multiples of 4. Be sure, to issue
-this command in the buffer, that contains your file, otherwise, it won't
-have an effect, since this is a buffer-local option (|local-option|)
-
-After setting this variable, you should reinitialize the plugins using
-|InitCSV|
-
- *CSVFixed*
-4.8.2 Setup using a Wizard
---------------------------
-Alternatively, you can setup the fixed width columns using the :CSVFixed
-command. This provides a simple wizard to select each column. If you enter
-the command: >
- :CSVFixed
-<
-The first column will be highlighted and Vim outputs:
-<Cursor>, <Space>, <ESC>, <BS>, <CR>...
-This means, you can now use those 5 keys to configure the fixed-width columns:
-
- <Cursor> Use Cursor Left (<Left>) and Cursor Right (<Right>) to move the
- highlighting bar.
- <Space> If you press <Space>, this column will be fixed and remain
- highlighted and there will be another bar, you can move using
- the Cursor keys. This means this column will be considered to be
- the border between 2 fixed with columns.
- <ESC> Abort
- <BS> Press the backspace key, to remove the last column you fixed with
- the <Space> key.
- <CR> Use Enter to finish the wizard. This will use all fixed columns
- to define the fixed width columns of your csv file. The plugin
- will be initialized and syntax highlighting should appear.
-
-Note: This only works, if your Vim has the 'colorcolumn' option available
-(This won't work with Vim < 7.3 and also not with a Vim without +syntax
-feature).
-
-
-4.9 CSV Header lines *csv-header*
---------------------
-By default, dynamic filtering |csv-filter| will not fold away the first line.
-If you don't like that, you can define your header line using the variable
-b:csv_fold_headerline, e.g. >
-
- let b:csv_headerline = 0
-
-to disable, that a header line won't be folded away. If your header line
-instead is on line 5, simply set this variable to 5. This also applies to the
-|Header_CSV| command.
-
-4.10 Number format *csv-nrformat*
-------------------
-When using the |SumCol_CSV| command, you can specify a certain number format
-using the /x:y/ argument. You can however also configure the plugin to detect
-a different number format than the default number format (which does not
-support a thousands separator and uses the '.' as decimal separator).
-
-To specify a different thousands separator by default, use >
-
- let b:csv_thousands_sep = ' '
-
-to have the space use as thousands separator and >
-
- let b:csv_decimal_sep = ','
-
-to use the comma as decimal separator.
-
-4.11 Move folded lines *csv-move-folds*
-----------------------
-If you use dynamic filters (see |csv-filter|), you can configure the plugin to
-move all folded lines to the end of the file. This only happens if you set the
-variable >
-
- let g:csv_move_folds = 1
-<
-and the file is modifiable. This let's you see all non-folded records as a
-consecutive area without being disrupted by folded lines.
-
-4.12 Using comments *csv-comments*
--------------------
-Strictly speaking, in csv files there can't be any comments. You might however
-still wish to comment or annotate certain sections in your file, so the CSV
-plugin supports Comments.
-
-Be default, the CSV plugin will use the 'commentstring' setting to identify
-comments. If this option includes the '%s' it will consider the part before
-the '%s' as leading comment marker and the part behind it as comment
-delimiter.
-
-You can however define your own comment marker, using the variable
-g:csv_comment. Like with the 'commentstring' setting, you can use '%s'
-expandos, that will denote where the actual comment text belongs. To define
-your own comment string, put this in your |.vimrc| >
-
- :let g:csv_comment = '#'
-<
-Which will use the '#' sign as comment leader like in many scripting
-languages.
-
-After setting this variable, you should reinitialize the plugins using
-|InitCSV|
-
- *csv-foldtext*
-By default, the csv plugin sets the 'foldtext' option. If you don't want this,
-set the variable `g:csv_disable_fdt` in your |.vimrc| >
-
- :let g:csv_disable_fdt = 1
-
-4.13 Size and performance considerations *csv-size*
-----------------------------------------
-By default, the csv plugin will analyze the whole file to determine which
-delimiter to use. Beside specifying the the actual delimiter to use
-(|csv-delimiter|) you can restrict analyzing the plugin to consider only a
-certain part of the file. This should make loading huge csv files a log
-faster. To only consider the first 100 rows set the `g:csv_start` and
-`g:csv_end` variables in your |.vimrc| like this >
-
- :let g:csv_start = 1
- :let g:csv_end = 100
-
-Also note, you can use the Large File plugin
-(http://www.drchip.org/astronaut/vim/index.html#LARGEFILE) which however will
-disable syntax highlighting and the filetype commands for very large csv files
-(by default larger than 100 MB).
-
-See also |csv-slow|
-==============================================================================
-5. Functions *CSV-Functions*
-
-The csv plugins also defines some functions, that can be used for scripting
-when a csv file is open
-
-5.1 CSVPat() *CSVPat()*
-------------
-CSVPat({column}[, {pattern}])
-
-This function returns the pattern for the selected column. If only columns is
-given, returns the regular expression used to search for the pattern '.*' in
-that column (which means the content of that column). Alternatively, an
-optional pattern can be given, so the return string can be directly feeded to
-the |/| or |:s| command, e.g. type: >
-
- :s/<C-R>=CSVPat(3, 'foobar')<cr>/baz
-
-where the <C-R> means pressing Control followed by R followed by =
-(see |c_CTRL-R_=|). A prompt will apear, with the '=' as the first character
-on which you can enter expressions.
-
-In this case enter CSVPat(3, 'foobar') which returns the pattern to search for
-the string 'foobar' in the third column. After you press enter, the returned
-pattern will be put after the :s command so you can directly enter / and the
-substitute string.
-
-5.2 CSVField(x,y[, orig]) *CSVField()*
--------------------------
-This function returns the field at index (x,y) (starting from 1). If the
-parameter orig is given, returns the column "as is" (e.g. including delimiter
-and leading and trailing whitespace, otherwise that will be stripped.)
-
-5.3 CSVCol([name]) *CSVCol()*
-------------------
-If the name parameter is given, returns the name of the column, else returns
-the index of the current column, starting at 1.
-
-5.4 CSVSum(col, fmt, startline, endline) *CSVSum()*
-----------------------------------------
-Returns the sum for column col. Uses fmt to parse number format (see
-|:CSVSumCol|) startline and endline specify the lines to consider, if empty,
-will be first and last line.
-
-5.5 CSVCount(col, fmt, startline, endline[, distinct]) *CSVCount()*
-------------------------------------------------------
-Returns the count of values for column col. If the optional parameter
-[distinct] is given, only returns the distinct number of values.
-
-5.6 CSVMax(col, fmt, startline, endline) *CSVMax()*
-------------------------------------------------------
-Returns the 10 largest values for column col.
-
-5.7 CSVMin(col, fmt, startline, endline) *CSVMin()*
-------------------------------------------------------
-Returns the 10 smallest values for column col.
-
-5.8 CSVAvg(col, fmt, startline, endline) *CSVAvg()*
-------------------------------------------------------
-Returns the average value for column col.
-
-5.9 CSVWidth([silent]) *CSVWidth()*
-------------------------------------------------------
-Returns a list with the width for each column. If the first argument is given
-and non-zero, do not output warning message about the number of records used
-to calculate the width (else it might output something like:
- CSV: File too large, only checking the first 10000 rows for the width
-), default: 1
-
-==============================================================================
-6. CSV Tips and Tricks *csv-tips*
-
-Here, there you'll find some small tips and tricks that might help when
-working with CSV files.
-
-6.1 Statusline *csv-stl*
---------------
-Suppose you want to include the column, on which the cursor is, into your
-statusline. You can do this, by defining in your .vimrc the 'statusline' like
-this: >
-
- function MySTL()
- if has("statusline")
- hi User1 term=standout ctermfg=0 ctermbg=11 guifg=Black guibg=Yellow
- let stl = ...
- if exists("*CSV_WCol")
- let csv = '%1*%{&ft=~"csv" ? CSV_WCol() : ""}%*'
- else
- let csv = ''
- endif
- return stl.csv
- endif
- endfunc
- set stl=%!MySTL()
-<
-
-This will draw in your statusline right aligned the current column and max
-column (like 1/10), if you are inside a CSV file. The column info will be
-drawn using the User1 highlighting (|hl-User1|), that has been defined in the
-second line of the function. In the third line of your function, put your
-desired 'statusline' settings as |expression|. Note the section starting with
-'if exists(..)' guards against not having loaded the filetype plugin.
-
-Note: vim-airline (https://github.com/bling/vim-airline) by default supports
-the csv plugin and enables a nice little csv statusline which helps for
-navigating within a csv file. For details, see the Vim-Airline documentation.
-
- *CSV_WCol()*
-The CSV_WCol() function controls, what will be output. In the simplest case,
-when no argument is given, it simply returns on which column the cursor is.
-This would look like '1/10' which means the cursor is on the first of 10
-columns. If you rather like to know the name of the column, simply give as
-parameter to the function the string "Name". This will return the column name
-as it is printed on the first line of that column. This can be adjusted, to
-have the column name printed into the statusline (see |csv-stl| above) by
-replacing the line >
-
- let csv = '%1*%{&ft=~"csv" ? CSV_WCol() : ""}%*'
-<
-by e.g.
-
- let csv = '%1*%{&ft=~"csv" ? CSV_WCol("Name") . " " . CSV_WCol() : ""}%*'
-
-which will output "Name 2/10" if the cursor is in the second column
-which is named "Name".
-
-6.2 Slow CSV plugin *csv-slow*
--------------------
-Processing a csv file using |ArrangeColumn_CSV| can be quite slow, because Vim
-needs to calculate the width for each column and then replace each column by
-itself widened by spaces to the optimal length. Unfortunately, csv files tend
-to be quite big. Remember, for a file with 10,000 lines and 50 columns Vim
-needs to process each cell, which accumulates to 500,000 substitutions. It
-might take some time, until Vim is finished.
-
-You can speed up things a little bit, if you omit the '!' attribute to the
-|ArrangeColumn| (but this will only work, if the width has been calculated
-before, e.g. by issuing a :1ArrangeColumn command to arrange only the first
-line. Additionally you can also configure how this command behaves by setting
-some configuration variables.
-
-Also note, using dynamic filters (|csv-filter|), can slow down Vim
-considerably, since they internally work with complex regular expressions, and
-if you have a large file, containing many columns, you might hit a performance
-penalty (especially, if you want to filter many columns). It's best to avoid
-those functions if you are using a large csv file (so using strict columns
-|csv-strict| might help a little and also setting 're' to 1 might also
-alleviate it a little).
-
-
-6.3 Defining custom aggregate functions *csv-aggregate-functions*
----------------------------------------
-The CSV plugin already defines the |SumCol_CSV| command, to let you calculate
-the sum of all values of a certain column within a given range. This will
-consider all values within the range, that are not folded away (|csv-filter|),
-and also skip comments and the header lines. The delimiter will be deleted
-from each field.
-
-But it may be, that you don't need the sum, but would rather want to have the
-average of all values within a certain column. You can define your own
-function and let the plugin call it for a column like this:
-
- 1) You define your own custom function in the after directory of your
- vim runtime path |after-directory| (see also #2 below) >
-
- fun! My_CSV_Average(col)
- let sum=0
- for item in a:col
- let sum+=item
- endfor
- return sum/len(a:col)
- endfun
-<
- This function takes a list as argument, and calculates the average for
- all items in the list. You could also make use of Vim's |eval()|
- function and write your own Product function like this >
-
- fun! My_CSV_Product(col)
- return eval(join(a:col, '*'))
- endfun
-<
-
- 2) Now define your own custom command, that calls your custom function for
- a certain column >
-
- command! -buffer -nargs=? -range=% AvgCol
- \ :echo csv#EvalColumn(<q-args>,
- \ "My_CSV_Average", <line1>,<line2>)
-<
- This command should best be put into a file called csv.vim and save
- it into your ~/.vim/after/ftplugin/ directory. Create directories
- that don't exist yet. For Windows, this would be the
- $VIMRUNTIME/vimfiles/after/ftplugin directory.
-
- 3) Make sure, your |.vimrc| includes a filetype plugin setting like this >
-
- filetype plugin on
-<
- This should make sure, that all the necessary scripts are loaded by
- Vim.
-
- After restarting Vim, you can now use your custom command definition
- :AvgCol. Use a range, for the number of lines you want to evaluate and
- optionally use an argument to specify which column you want to be
- evaluated >
-
- :2,$AvgCol 7
-<
- This will evaluate the average of column seven (assuming, line 1 is the
- header line, which should not be taken into account).
-
- Note: this plugin already defines an average function.
-
-6.4 Autocommand on opening/closing files *csv-arrange-autocmd*
-----------------------------------------
-If you want your CSV files to always be displayed like a table, you can
-achieve this using the |ArrangeColumn_CSV| command and some autocommands.
-Define these autocommands in your |.vimrc| >
-
- aug CSV_Editing
- au!
- au BufRead,BufWritePost *.csv :%ArrangeColumn
- au BufWritePre *.csv :%UnArrangeColumn
- aug end
-
-Upon Entering a csv file, Vim will visually arrange all columns and before
-writing, those columns will be collapsed again. The BufWritePost autocommand
-makes sure, that after the file has been written successfully, the csv file
-will again be visually arranged.
-
-You can also simply set the variable >
-
- let g:csv_autocmd_arrange = 1
-<
-in your vimrc and an autocmd will be installed, that visually arranges your
-csv file whenever you open them for editing. Alternatively, you can restrict
-this setting to files below a certain size. For example, if you only want to
-enable this feature for files smaller than 1 MB, put this into your |.vimrc| >
-
- let g:csv_autocmd_arrange = 1
- let g:csv_autocmd_arrange_size = 1024*1024
-
-Note, this is highly experimental and especially on big files, this might
-slow down Vim considerably.
-
-6.5 Syntax error when opening a CSV file *csv-syntax-error*
-----------------------------------------
-If you see this error: >
-
- CSV Syntax:Invalid column pattern, using default pattern \%([^,]*,\|$\)
-<
-This happens usually, when the syntax script is read before the filetype
-plugin, so the plugin did not have a chance to setup the column delimiter
-correctly.
-
-The easy way to fix it, is to make sure the :syntax on (|:syn-on|) statement
-comes after the :filetype plugin (|:filetype-plugin-on|) statement in your
-|.vimrc|
-
-Alternatively, you can simply call |InitCSV| and ignore the error.
-
-Note: It could also be caused by lazy loading feature by a vim plugin
-manager. For example this line might also cause it: >
-
- Plug 'https://github.com/chrisbra/csv.vim', { 'for' : 'csv' }
-<
-
-The fix would then be: >
-
- Plug 'https://github.com/chrisbra/csv.vim'
-
-6.6 Calculate new columns *csv-calculate-column*
--------------------------
-Suppose you have a table like this:
-
-Index;Value1;Value2~
-1;100;3 `
-2;20;4 `
-
-And you need one more column, that is the calculated product of column 2 and
-3, you can make use of the provided |CSVField()| function using a
-|sub-replace-expression| of an |:s| command. In this case, you would do this: >
-
- :2,3s/$/\=printf("%s%.2f", b:delimiter,
- (CSVField(2,line('.'))+0.0)*(CSVField(3,line('.'))+0.0/
-
-Note: Enter as single line. The result will be this: >
-
-Index;Value1;Value2~
-1;100;3;300.00 `
-2;20;4;80.00 `
-
-6.7 Using the result of an evaluation in insert mode *b:csv_result*
-----------------------------------------------------
-The result of the last evaluation like e.g. |SumCol_CSV| will be available in
-the buffer-local variable `b:csv_result`. This allows to easily enter the
-result in a new new cell while in insert mode, using |i_CTRL-R|(e.g. in insert
-mode press Ctrl-R followed by "=b:csv_result<enter>".
-
-You can also easily copy and paste it into e.g. the system clipboard using >
- :let @+=b:csv_result
-
-==============================================================================
-7. CSV Changelog *csv-changelog*
-
-see CHANGELOG.md in root directory of the plugin.
-
-# vim:ft=help
-
-endif