mirror of
https://github.com/keanuplayz/dotfiles.git
synced 2024-08-15 02:33:12 +00:00
Merge branch 'dmitmel-master'
This commit is contained in:
commit
5ab08f0f0b
8 changed files with 137 additions and 27 deletions
63
nvim/autoload/dotfiles/indent_motion.vim
Normal file
63
nvim/autoload/dotfiles/indent_motion.vim
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
" Based on <https://github.com/kana/vim-textobj-indent/blob/deb76867c302f933c8f21753806cbf2d8461b548/autoload/textobj/indent.vim>
|
||||||
|
" A motion for moving over enclosing indentation blocks. Primarily intended
|
||||||
|
" for reverse-engineering CrossCode.
|
||||||
|
|
||||||
|
function dotfiles#indent_motion#run(direction)
|
||||||
|
let l:cursor_linenr = line(".")
|
||||||
|
let l:max_linenr = line("$")
|
||||||
|
|
||||||
|
let l:retry = 0
|
||||||
|
while l:retry <# 2
|
||||||
|
let l:retry += 1
|
||||||
|
|
||||||
|
let l:base_linenr = l:cursor_linenr
|
||||||
|
let l:base_indent = 0
|
||||||
|
while 1 <=# l:base_linenr && l:base_linenr <=# l:max_linenr
|
||||||
|
let l:base_indent = dotfiles#indent_motion#indent_level_of(l:base_linenr)
|
||||||
|
if l:base_indent >=# 0
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let l:base_linenr += a:direction
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
let l:target_linenr = l:base_linenr
|
||||||
|
|
||||||
|
let l:curr_linenr = l:base_linenr + a:direction
|
||||||
|
let l:prev_indent = l:base_indent
|
||||||
|
while 1 <=# l:curr_linenr && l:curr_linenr <=# l:max_linenr
|
||||||
|
let l:indent = dotfiles#indent_motion#indent_level_of(l:curr_linenr)
|
||||||
|
|
||||||
|
if l:indent >=# 0
|
||||||
|
if l:indent <# l:base_indent
|
||||||
|
break
|
||||||
|
else
|
||||||
|
let l:target_linenr = l:curr_linenr
|
||||||
|
endif
|
||||||
|
elseif l:base_indent ==# 0 && l:prev_indent ==# 0
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:prev_indent = l:indent
|
||||||
|
let l:curr_linenr += a:direction
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
if l:target_linenr ==# l:cursor_linenr
|
||||||
|
let l:cursor_linenr += a:direction
|
||||||
|
if 1 <=# l:cursor_linenr && l:cursor_linenr <=# l:max_linenr
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
break
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
execute "normal! " . l:target_linenr . "G^"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" <https://github.com/kana/vim-textobj-indent/blob/deb76867c302f933c8f21753806cbf2d8461b548/autoload/textobj/indent.vim#L120-L127>
|
||||||
|
function dotfiles#indent_motion#indent_level_of(linenr)
|
||||||
|
if getline(a:linenr) ==# ""
|
||||||
|
return -1
|
||||||
|
endif
|
||||||
|
return indent(a:linenr)
|
||||||
|
endfunction
|
6
nvim/autoload/dotfiles/utils.vim
Normal file
6
nvim/autoload/dotfiles/utils.vim
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
function dotfiles#utils#array_remove_element(array, element)
|
||||||
|
let l:index = index(a:array, a:element)
|
||||||
|
if l:index >= 0
|
||||||
|
call remove(a:array, l:index)
|
||||||
|
endif
|
||||||
|
endfunction
|
9
nvim/plugin/dotfiles/indent_motion.vim
Normal file
9
nvim/plugin/dotfiles/indent_motion.vim
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
for [s:plug_mapping, s:direction, s:user_mapping] in [["prev", -1, "("], ["next", 1, ")"]]
|
||||||
|
let s:plug_mapping = "<Plug>dotfiles_indent_motion_".s:plug_mapping
|
||||||
|
for s:mode in ["n", "v", "o"]
|
||||||
|
execute s:mode."noremap" "<silent>" s:plug_mapping "<Cmd>call dotfiles#indent_motion#run(".s:direction.")<CR>"
|
||||||
|
if !empty(s:user_mapping)
|
||||||
|
execute s:mode."map" s:user_mapping s:plug_mapping
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfor
|
|
@ -106,10 +106,6 @@ set commentstring=//%s
|
||||||
nnoremap <C-n> <C-i>
|
nnoremap <C-n> <C-i>
|
||||||
nnoremap <C-p> <C-o>
|
nnoremap <C-p> <C-o>
|
||||||
|
|
||||||
nnoremap <leader>kk <Cmd>set keymap&<CR>
|
|
||||||
nnoremap <leader>kr <Cmd>set keymap=russian-jcuken-custom<CR>
|
|
||||||
nnoremap <leader>ku <Cmd>set keymap=ukrainian-jcuken-custom<CR>
|
|
||||||
|
|
||||||
nnoremap Q <nop>
|
nnoremap Q <nop>
|
||||||
|
|
||||||
" normal mode
|
" normal mode
|
||||||
|
@ -138,6 +134,19 @@ set commentstring=//%s
|
||||||
" }}}
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
|
" Keymap switcher {{{
|
||||||
|
|
||||||
|
nnoremap <leader>kk <Cmd>set keymap&<CR>
|
||||||
|
nnoremap <leader>kr <Cmd>set keymap=russian-jcuken-custom<CR>
|
||||||
|
nnoremap <leader>ku <Cmd>set keymap=ukrainian-jcuken-custom<CR>
|
||||||
|
|
||||||
|
nnoremap <C-o> <Cmd>DotfilesSwapKeymaps<CR>
|
||||||
|
let g:dotfiles_prev_keymap = &keymap
|
||||||
|
command! -nargs=0 DotfilesSwapKeymaps let [g:dotfiles_prev_keymap, &keymap] = [&keymap, g:dotfiles_prev_keymap]
|
||||||
|
|
||||||
|
" }}}
|
||||||
|
|
||||||
|
|
||||||
" Search {{{
|
" Search {{{
|
||||||
|
|
||||||
" ignore case if the pattern doesn't contain uppercase characters (use '\C'
|
" ignore case if the pattern doesn't contain uppercase characters (use '\C'
|
||||||
|
|
|
@ -36,6 +36,10 @@ nnoremap <silent><expr> <CR> empty(&buftype) ? ":write<bar>wall\<CR>" : "\<CR>"
|
||||||
" Ranger {{{
|
" Ranger {{{
|
||||||
let g:ranger_replace_netrw = 1
|
let g:ranger_replace_netrw = 1
|
||||||
let g:ranger_map_keys = 0
|
let g:ranger_map_keys = 0
|
||||||
|
" The default path (/tmp/chosenfile) is inaccessible at least on
|
||||||
|
" Android/Termux, so the tempname() function was chosen because it respects
|
||||||
|
" $TMPDIR.
|
||||||
|
let g:ranger_choice_file = tempname()
|
||||||
nnoremap <silent> <Leader>o <Cmd>Ranger<CR>
|
nnoremap <silent> <Leader>o <Cmd>Ranger<CR>
|
||||||
" ranger.vim relies on the Bclose.vim plugin, but I use Bbye.vim, so this
|
" ranger.vim relies on the Bclose.vim plugin, but I use Bbye.vim, so this
|
||||||
" command is here just for compatitabilty
|
" command is here just for compatitabilty
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
nnoremap <leader>gw :GBrowse<CR>
|
nnoremap <leader>gw :GBrowse<CR>
|
||||||
nnoremap <leader>gW :.GBrowse<CR>
|
nnoremap <leader>gW :.GBrowse<CR>
|
||||||
nnoremap <leader>gc :Git commit %
|
nnoremap <leader>gc :Git commit %
|
||||||
|
nnoremap <leader>gC :Git commit --amend
|
||||||
nnoremap <leader>gl :Gclog<CR>
|
nnoremap <leader>gl :Gclog<CR>
|
||||||
nnoremap <leader>gp :Git push
|
nnoremap <leader>gp :Git push
|
||||||
" }}}
|
" }}}
|
||||||
|
|
17
zsh/path.zsh
17
zsh/path.zsh
|
@ -70,7 +70,8 @@ export GOPATH=~/go
|
||||||
path_prepend path "$GOPATH/bin"
|
path_prepend path "$GOPATH/bin"
|
||||||
|
|
||||||
# Rust
|
# Rust
|
||||||
if [[ -f ~/.rustup/settings.toml ]]; then
|
rustup_home="${RUSTUP_HOME:-$HOME/.rustup}"
|
||||||
|
if [[ -f "$rustup_home"/settings.toml ]]; then
|
||||||
# Make a low-effort attempt at quickly extracting the selected Rust toolchain
|
# Make a low-effort attempt at quickly extracting the selected Rust toolchain
|
||||||
# from rustup's settings. The TOML file is obviously assumed to be well-formed
|
# from rustup's settings. The TOML file is obviously assumed to be well-formed
|
||||||
# and syntactically correct because virtually always it's manipulated with the
|
# and syntactically correct because virtually always it's manipulated with the
|
||||||
|
@ -78,7 +79,7 @@ if [[ -f ~/.rustup/settings.toml ]]; then
|
||||||
# because Rust toolchain names don't need escaping in strings.
|
# because Rust toolchain names don't need escaping in strings.
|
||||||
# See also <https://github.com/toml-lang/toml/blob/master/toml.abnf>.
|
# See also <https://github.com/toml-lang/toml/blob/master/toml.abnf>.
|
||||||
rust_toolchain=""
|
rust_toolchain=""
|
||||||
< ~/.rustup/settings.toml while IFS= read -r line; do
|
< "$rustup_home"/settings.toml while IFS= read -r line; do
|
||||||
if [[ "$line" =~ '^default_toolchain = "(.+)"$' ]]; then
|
if [[ "$line" =~ '^default_toolchain = "(.+)"$' ]]; then
|
||||||
rust_toolchain="${match[1]}"
|
rust_toolchain="${match[1]}"
|
||||||
break
|
break
|
||||||
|
@ -88,16 +89,20 @@ if [[ -f ~/.rustup/settings.toml ]]; then
|
||||||
done; unset line
|
done; unset line
|
||||||
|
|
||||||
if [[ -n "$rust_toolchain" ]]; then
|
if [[ -n "$rust_toolchain" ]]; then
|
||||||
rust_sysroot=~/.rustup/toolchains/"$rust_toolchain"
|
rust_sysroot="$rustup_home"/toolchains/"$rust_toolchain"
|
||||||
# path_append path "$rust_sysroot"/bin
|
# path_append path "$rust_sysroot"/bin
|
||||||
path_prepend fpath "$rust_sysroot"/zsh/site-functions
|
path_prepend fpath "$rust_sysroot"/zsh/site-functions
|
||||||
path_prepend manpath "$rust_sysroot"/share/man
|
path_prepend manpath "$rust_sysroot"/share/man
|
||||||
path_prepend ld_library_path "$rust_sysroot"/lib
|
|
||||||
unset rust_sysroot
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unset rust_toolchain
|
for rust_sysroot in "$rustup_home"/toolchains/*(/); do
|
||||||
|
# The filenames of all libraries in toolchain dirs are suffixed with their
|
||||||
|
# build hashes or the compiler identifier, so in practice conflicts are
|
||||||
|
# insanely unlikely.
|
||||||
|
path_prepend ld_library_path "$rust_sysroot"/lib
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
unset rustup_home rust_toolchain rust_sysroot
|
||||||
|
|
||||||
path_prepend path ~/.cargo/bin
|
path_prepend path ~/.cargo/bin
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ _plugin completions 'zsh-users/zsh-completions' "$_checkout_latest_version"
|
||||||
# Oh My Zsh {{{
|
# Oh My Zsh {{{
|
||||||
|
|
||||||
omz_features=(key-bindings termsupport)
|
omz_features=(key-bindings termsupport)
|
||||||
omz_plugins=(git extract fasd)
|
omz_plugins=(git)
|
||||||
|
|
||||||
_plugin ohmyzsh 'ohmyzsh/ohmyzsh' \
|
_plugin ohmyzsh 'ohmyzsh/ohmyzsh' \
|
||||||
load='lib/'${^omz_features}'.zsh' \
|
load='lib/'${^omz_features}'.zsh' \
|
||||||
|
@ -64,22 +64,35 @@ _plugin completions 'zsh-users/zsh-completions' "$_checkout_latest_version"
|
||||||
|
|
||||||
# fasd {{{
|
# fasd {{{
|
||||||
|
|
||||||
#unalias j
|
if command_exists fasd; then
|
||||||
#j() {
|
# Initialization taken from <https://github.com/ohmyzsh/ohmyzsh/blob/6fbad5bf72fad4ecf30ba4d4ffee62bac582f0ed/plugins/fasd/fasd.plugin.zsh>
|
||||||
# local _fasd_ret
|
fasd_cache="${ZSH_CACHE_DIR}/fasd-init-cache"
|
||||||
# _fasd_ret="$(
|
if [[ "${commands[fasd]}" -nt "$fasd_cache" || ! -s "$fasd_cache" ]]; then
|
||||||
# # -l: list all paths in the database (without scores)
|
fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wcomp-install >| "$fasd_cache"
|
||||||
# # -d: list only directories
|
fi
|
||||||
# # -R: in the reverse order
|
source "$fasd_cache"
|
||||||
# fasd -l -d -R |
|
unset fasd_cache
|
||||||
# fzf --height=40% --layout=reverse --tiebreak=index --query="$*"
|
|
||||||
# )"
|
alias v='f -e "$EDITOR"'
|
||||||
# if [[ -d "$_fasd_ret" ]]; then
|
alias o='a -e xdg-open'
|
||||||
# cd -- "$_fasd_ret"
|
|
||||||
# elif [[ -n "$_fasd_ret" ]]; then
|
# alias j='zz'
|
||||||
# print -- "$_fasd_ret"
|
j() {
|
||||||
# fi
|
local _fasd_ret
|
||||||
#}
|
_fasd_ret="$(
|
||||||
|
# -l: list all paths in the database (without scores)
|
||||||
|
# -d: list only directories
|
||||||
|
# -R: in the reverse order
|
||||||
|
fasd -l -d -R |
|
||||||
|
fzf --height=40% --layout=reverse --tiebreak=index --query="$*"
|
||||||
|
)"
|
||||||
|
if [[ -d "$_fasd_ret" ]]; then
|
||||||
|
cd -- "$_fasd_ret"
|
||||||
|
elif [[ -n "$_fasd_ret" ]]; then
|
||||||
|
print -- "$_fasd_ret"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue