Compare commits
30 Commits
Author | SHA1 | Date |
---|---|---|
changeme | 21a5d0b3c1 | |
changeme | 045ccdfa9f | |
changeme | 83005361b6 | |
changeme | 722e2da2f2 | |
Michael Mandl | 97d53cf45c | |
Michael Mandl | 4896a7c3cd | |
Michael Mandl | a7097e7cb8 | |
Michael Mandl | d12fde2ddc | |
mandlm | 7c6d4779f6 | |
mandlm | 15aa4bf864 | |
mandlm | f4b4dfe38d | |
mandlm | d91bb228a7 | |
mandlm | 84cd6e1661 | |
mandlm | a6f8b0fda5 | |
mandlm | b6b1377f93 | |
mandlm | cd2d198447 | |
mandlm | b842eb4a48 | |
mandlm | 82512f18df | |
mandlm | 8d7e9ca868 | |
mandlm | 657fc628d5 | |
mandlm | b551e9965a | |
mandlm | a2736f4579 | |
mandlm | c170d0779f | |
mandlm | 48cdd5b9d7 | |
mandlm | 55cb28c7e0 | |
mandlm | 5f98da2e0d | |
mandlm | b690d216d2 | |
mandlm | 8b92df058a | |
mandlm | 191ed066f7 | |
mandlm | b18fb2ab5e |
69
README.md
69
README.md
|
@ -1,3 +1,68 @@
|
||||||
# vim-split-open
|
# SplitOpen
|
||||||
|
|
||||||
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.
|
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
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
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)
|
||||||
|
execute("tabedit " . a:filename)
|
||||||
|
call s:splitOpenFile(a:filename)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! splitopen#SplitFile()
|
||||||
|
call s:splitOpenFile(expand("%:p"))
|
||||||
|
endfunction
|
|
@ -0,0 +1,77 @@
|
||||||
|
*splitopen.txt* opens file-pairs in a new split-window tab
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
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*
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
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*
|
||||||
|
|
||||||
|
SplitOpen is GPL-3.0 licensed. See LICENSE file for more info.
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
4. 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
|
|
@ -1,13 +0,0 @@
|
||||||
function! SplitOpenFile(filename)
|
|
||||||
execute("tabedit " . a:filename)
|
|
||||||
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
|
|
||||||
|
|
||||||
command! -nargs=1 SplitOpen :call SplitOpenFile("<args>")
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
command! -nargs=1 SplitOpen :call splitopen#SplitOpenFile("<args>")
|
||||||
|
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
|
Loading…
Reference in New Issue