Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
21a5d0b3c1 | ||
|
045ccdfa9f | ||
|
83005361b6 | ||
|
722e2da2f2 | ||
|
97d53cf45c | ||
|
4896a7c3cd | ||
|
a7097e7cb8 | ||
|
d12fde2ddc | ||
7c6d4779f6 | |||
15aa4bf864 | |||
f4b4dfe38d | |||
d91bb228a7 | |||
84cd6e1661 | |||
a6f8b0fda5 | |||
b6b1377f93 | |||
cd2d198447 | |||
b842eb4a48 | |||
82512f18df |
25
README.md
25
README.md
@ -12,10 +12,26 @@ 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
|
||||
|
||||
@ -32,6 +48,15 @@ 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
|
||||
|
||||
|
@ -1,11 +1,68 @@
|
||||
function splitopen#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")
|
||||
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
|
||||
|
@ -5,7 +5,8 @@ CONTENTS *SplitOpenContents*
|
||||
|
||||
1. Usage ..............................|SplitOpenUsage|
|
||||
2. Configuration ......................|SlitOpenConfiguraton|
|
||||
2.1 g:splitopen_set_fzf_keys.......|SplitOpenConfiguration_set_fzf_keys|
|
||||
2.1 g:splitopen_extensions.........|SplitOpenConfiguration_extensions|
|
||||
2.2 g:splitopen_set_fzf_keys.......|SplitOpenConfiguration_set_fzf_keys|
|
||||
3. License ............................|SplitOpenLicense|
|
||||
4. Changelog ..........................|SplitOpenChangelog|
|
||||
|
||||
@ -20,14 +21,31 @@ 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*
|
||||
|
||||
2.1 g:splitopen_set_fzf_keys *SplitOpenConfiguration_set_fzf_keys*
|
||||
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
|
||||
|
||||
@ -44,6 +62,12 @@ 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
|
||||
|
@ -1,4 +1,13 @@
|
||||
command -nargs=1 SplitOpen :call splitopen#SplitOpenFile("<args>")
|
||||
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
|
||||
@ -9,5 +18,6 @@ if g:splitopen_set_fzf_keys
|
||||
\ 'ctrl-s': 'SplitOpen',
|
||||
\ 'ctrl-t': 'tab split',
|
||||
\ 'ctrl-x': 'split',
|
||||
\ 'ctrl-v': 'vsplit' }
|
||||
\ 'ctrl-v': 'vsplit',
|
||||
\ }
|
||||
endif
|
||||
|
Reference in New Issue
Block a user