diff --git a/README.md b/README.md index d1bd33f..4cd4129 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,3 @@ -# SplitOpen +# vim-split-open -This vim plugin opens file-pairs in a new split-window tab - -## Usage - -Use - - :SplitOpen filename - -with a .cpp or .h file as filename to open a new tab containing a vertical split -with the corresponding header file in the left window and the corresponding -source file in the right window. - -Use - - :Split - -to open the corresponding header or source file to your currently open file in -a vertical split. - -## Configuration - -You can configure the following settings: - -### g:splitopen_extensions - -Use this dictionary to define your pairs of left-hand- right-hand-side file -types. E.g. - - let g:splitopen_extensions = {"h": "cpp"} - -always places a .cpp file on the right-hand side when opening an .h file and -vice versa. - -### g:splitopen_set_fzf_keys - -Set this option to 1 - - let g:splitopen_set_fzf_keys = 1 - -to have SplitOpen overwrite the default fzf keybindings ctrl-t/x/v for opening -files in splits or tabs to add an addional binding ctrl-s to call SplitOpen. - -## License - -SplitOpen is GPL-3.0 licensed. See LICENSE file for more info. - -## Changelog - -v1.1.0 -* Added Split() command - -v1.0.0 -* Fixed error when reloading plugin - -v0.0.4 -* Add filetype configuraton - -v0.0.3 -* Add fzf.vim keybinding - -v0.0.2 -* Added delay-loading -* Added documentation - -v0.0.1 -* Initial release +This is my first vim plugin. It provides a command to open a combination of c++ source and header file in a new tab split side-by-side. diff --git a/autoload/splitopen.vim b/autoload/splitopen.vim index 1151120..d4f2aac 100644 --- a/autoload/splitopen.vim +++ b/autoload/splitopen.vim @@ -1,68 +1,11 @@ -function s:invert_dict(source_dict) - let result = {} - for [key, value] in items(a:source_dict) - let result[value] = key - endfor - return result -endfunction - -let s:extensions = g:splitopen_extensions -let s:extensions_rev = s:invert_dict(s:extensions) - -function s:isLeftSideExtension(extension) - return has_key(s:extensions, a:extension) -endfunction - -function s:isRightSideExtension(extension) - return has_key(s:extensions_rev, a:extension) -endfunction - -function s:getFileExtension(filename) - return fnamemodify(a:filename, ":e") -endfunction - -function s:getFileRoot(filename) - return fnamemodify(a:filename, ":r") -endfunction - -function s:getSwitchExtension(filename) - let extension = s:getFileExtension(a:filename) - if s:isLeftSideExtension(extension) - return s:extensions[extension] - elseif s:isRightSideExtension(extension) - return s:extensions_rev[extension] - endif -endfunction - -function s:getSwitchFile(filename) - return s:getFileRoot(a:filename) . "." . s:getSwitchExtension(a:filename) -endfunction - -function s:addLeftSplit(filename) - execute("vsplit " . s:getSwitchFile(a:filename)) - execute("wincmd l") -endfunction - -function s:addRightSplit(filename) - execute("vsplit " . s:getSwitchFile(a:filename)) - execute("wincmd L") - execute("wincmd h") -endfunction - -function s:splitOpenFile(filename) - let extension = s:getFileExtension(a:filename) - if s:isLeftSideExtension(extension) - call s:addRightSplit(a:filename) - elseif s:isRightSideExtension(extension) - call s:addLeftSplit(a:filename) - endif -endfunction - -function! splitopen#SplitOpenFile(filename) +function splitopen#SplitOpenFile(filename) execute("tabedit " . a:filename) - call s:splitOpenFile(a:filename) -endfunction - -function! splitopen#SplitFile() - call s:splitOpenFile(expand("%:p")) + let l:file_extension = tolower(fnamemodify(a:filename, ":e")) + if l:file_extension == "cpp" + execute("FSSplitLeft") + execute("wincmd l") + elseif l:file_extension == "h" + execute("FSSplitRight") + execute("wincmd h") + endif endfunction diff --git a/doc/splitopen.txt b/doc/splitopen.txt index 8d64698..66af367 100644 --- a/doc/splitopen.txt +++ b/doc/splitopen.txt @@ -3,12 +3,9 @@ ================================================================================ CONTENTS *SplitOpenContents* - 1. Usage ..............................|SplitOpenUsage| - 2. Configuration ......................|SlitOpenConfiguraton| - 2.1 g:splitopen_extensions.........|SplitOpenConfiguration_extensions| - 2.2 g:splitopen_set_fzf_keys.......|SplitOpenConfiguration_set_fzf_keys| - 3. License ............................|SplitOpenLicense| - 4. Changelog ..........................|SplitOpenChangelog| + 1. Usage ..................................|SplitOpenUsage| + 2. License ................................|SplitOpenLicense| + 3. Changelog ..............................|SplitOpenChangelog| ================================================================================ 1. Usage *SplitOpenUsage* @@ -21,57 +18,17 @@ with a .cpp or .h file as filename to open a new tab containing a vertical split with the corresponding header file in the left window and the corresponding source file in the right window. -Use - - :Split - -to open the corresponding header or source file to your currently open file in -a vertical split. - ================================================================================ -2. Configuration *SplitOpenConfiguration* - -You can configure the following settings: - --------------------------------------------------------------------------------- -2.1 g:splitopen_extensions *SplitOpenConfiguration_extensions* - -Use this dictionary to define your pairs of left-hand- right-hand-side file -types. E.g. - - let g:splitopen_extensions = {"h": "cpp"} - -always places a .cpp file on the right-hand side when opening an .h file and -vice versa. - --------------------------------------------------------------------------------- -2.2 g:splitopen_set_fzf_keys *SplitOpenConfiguration_set_fzf_keys* - -Set this option to 1 - - let g:splitopen_set_fzf_keys = 1 - -to have SplitOpen overwrite the default fzf keybindings ctrl-t/x/v for opening -files in splits or tabs to add an addional binding ctrl-s to call SplitOpen. - -================================================================================ -3. License *SplitOpenLicense* +2. License *SplitOpenLicense* SplitOpen is GPL-3.0 licensed. See LICENSE file for more info. ================================================================================ -4. Changelog *SplitOpenChangelog* +3. Changelog *SplitOpenChangelog* -v1.1.0 - * Added Split() command -v1.0.0 - * Fixed error when reloading plugin -v0.0.4 - * Add filetype configuraton -v0.0.3 - * Add fzf.vim keybinding v0.0.2 * Added delay-loading * Added documentation + v0.0.1 * Initial release diff --git a/plugin/splitopen.vim b/plugin/splitopen.vim index 2534fdb..9036e30 100644 --- a/plugin/splitopen.vim +++ b/plugin/splitopen.vim @@ -1,23 +1 @@ -command! -nargs=1 SplitOpen :call splitopen#SplitOpenFile("") -command! Split :call splitopen#SplitFile() - -" map left-split / right-split file extensions -if !exists("g:splitopen_extensions") - let g:splitopen_extensions = { - \ "h": "cpp", - \ "H": "CPP", - \ } -endif - -if !exists('g:splitopen_set_fzf_keys') - let g:splitopen_set_fzf_keys = 0 -endif - -if g:splitopen_set_fzf_keys - let g:fzf_action = { - \ 'ctrl-s': 'SplitOpen', - \ 'ctrl-t': 'tab split', - \ 'ctrl-x': 'split', - \ 'ctrl-v': 'vsplit', - \ } -endif +command -nargs=1 SplitOpen :call splitopen#SplitOpenFile("")