{ ... }: {
programs.neovim = {
extraConfig = ''
"" Fold
""" fold text to be the first and last line
""" refer to sbernheim4's reply at
""" https://github.com/nvim-treesitter/nvim-treesitter/pull/390
function! GetSpaces(foldLevel)
if &expandtab == 1
" Indenting with spaces
let str = repeat(" ", a:foldLevel / (&shiftwidth + 1) - 1)
return str
elseif &expandtab == 0
" Indenting with tabs
return repeat(" ", indent(v:foldstart) - (indent(v:foldstart) / &shiftwidth))
endif
endfunction
function! MyFoldText()
let startLineText = getline(v:foldstart)
let endLineText = trim(getline(v:foldend))
let indentation = GetSpaces(foldlevel("."))
let spaces = repeat(" ", 200)
let str = indentation . startLineText . " …… " . endLineText . spaces
return str
endfunction
"" toggle foldmethod between manual and indent
set foldmethod=indent
:function ToggleFoldmethod()
: if (&foldmethod == "manual")
: set foldmethod=indent
: else
: set foldmethod=manual
: endif
:endfunction
nnoremap <Leader>z :call ToggleFoldmethod()<CR>:echo &foldmethod<CR>
"" Custom display for text when folding
set foldtext=MyFoldText()
""" Set the foldlevel to a high setting,
""" files are always loaded with opened folds.
set foldlevel=20
'';
};
}