From 556fad02dfa6d301687cd47307226fadb6d44c89 Mon Sep 17 00:00:00 2001 From: pvincent Date: Thu, 6 Aug 2026 18:12:25 +0400 Subject: [PATCH] vimrc --- README.md | 17 +- TODO.md | 10 - bin/miaou-bash | 10 +- bash.bashrc => etc/bash.bashrc | 0 inputrc => etc/inputrc | 0 etc/vim/vimrc.azerty | 6 + etc/vim/vimrc.core | 40 ++++ etc/vim/vimrc.local | 8 + etc/vim/vimrc.miaou | 3 + etc/vim/vimrc.rookie | 80 +++++++ init.sh | 2 +- install.sh | 27 ++- tools/elapsed | 8 - vimrc | 388 --------------------------------- 14 files changed, 176 insertions(+), 423 deletions(-) delete mode 100644 TODO.md rename bash.bashrc => etc/bash.bashrc (100%) rename inputrc => etc/inputrc (100%) create mode 100644 etc/vim/vimrc.azerty create mode 100644 etc/vim/vimrc.core create mode 100644 etc/vim/vimrc.local create mode 100644 etc/vim/vimrc.miaou create mode 100644 etc/vim/vimrc.rookie delete mode 100755 tools/elapsed delete mode 100644 vimrc diff --git a/README.md b/README.md index fc1b163..efedfd1 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,10 @@ Any feedback would be appreciated. ## Featuring * [x] miaou-bash +* [x] default settings + * [x] inputrc + * [x] vimrc + * [x] bashrc * [x] semver-git_tag * [x] some aliases (l, ll, ltr, ...) * [x] smart prompt @@ -26,7 +30,9 @@ Any feedback would be appreciated. ## install -`curl https://git.artcode.re/miaou/miaou-bash/raw/branch/main/install.sh | sudo bash -s` +```bash +curl https://git.artcode.re/miaou/miaou-bash/raw/branch/main/install.sh | sudo bash -s` +``` ## upgrade @@ -55,3 +61,12 @@ Any feedback would be appreciated. * CTRL DELETE, BACKSPACE => delete word * ALT DELETE, BACKSPACE => delete line from cursor * CTRL + SHIFT + / => undo + +## TODO + +* [ ] prompt git shows version with `+` when there is more than one commit over current version. ie: v0.0.0 + 2 commits more should display v-1.0.0+ +* [ ] semver_git_tag should append `RELEASE_NOTES.md` from this TODO markdown file, providing that NEW NOTE section below contains appropriate items to fulfill the current release note + * [ ] git log ..HEAD --oneline + +NEW NOTE +======== diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 8e09d58..0000000 --- a/TODO.md +++ /dev/null @@ -1,10 +0,0 @@ -TODO -==== - -* [ ] prompt git shows version with `+` when there is more than one commit over current version. ie: v-1.0.0 + 2 commits more should display v-1.0.0+ -* [ ] semver_git_tag should append `RELEASE_NOTES.md` from this TODO markdown file, providing that NEW NOTE section below contains appropriate items to fulfill the current release note - * [ ] git log ..HEAD --oneline - -NEW NOTE -======== - diff --git a/bin/miaou-bash b/bin/miaou-bash index 0412aaa..c849a37 100755 --- a/bin/miaou-bash +++ b/bin/miaou-bash @@ -239,7 +239,9 @@ function on_error { # add the funcname hint message from backward local funcname hint_for_next=false for ((i = 0; i < ${#error_funcname[@]}; i++)); do - is_true "$hint_for_next" && error_funcname[$i]+=' (hint: prefer source than child process)' && hint_for_next=false + is_true "$hint_for_next" && + error_funcname[i]+=' (hint: prefer source than child process)' && + hint_for_next=false funcname="${error_funcname[$i]}" [[ "$funcname" == '
' ]] && hint_for_next=true || true done @@ -319,7 +321,7 @@ function dump_stderr { miaou_debug "" unset 'tmp_error[-1]' if [[ $tmp_error_count == 0 ]]; then - # TODO: grab last_stdout and test no carriage_return, cf: ../test/stub/tee_last_line.bash + # IDEA: grab last_stdout and test no carriage_return, cf: ../test/stub/tee_last_line.bash miaou_debug "" printf "\r" fi @@ -408,9 +410,9 @@ function dump_stacktrace { if [[ -v hint ]]; then tty_ansi FG_YELLOW - printf "$hint" + builtin echo -n "$hint" tty_ansi RESET - printf ')' + builtin echo -n ')' fi echo diff --git a/bash.bashrc b/etc/bash.bashrc similarity index 100% rename from bash.bashrc rename to etc/bash.bashrc diff --git a/inputrc b/etc/inputrc similarity index 100% rename from inputrc rename to etc/inputrc diff --git a/etc/vim/vimrc.azerty b/etc/vim/vimrc.azerty new file mode 100644 index 0000000..f6c5f9c --- /dev/null +++ b/etc/vim/vimrc.azerty @@ -0,0 +1,6 @@ +" AZERTY quick access to basic keys +" --------------------------------- +nnoremap ! . +nnoremap à 0 +nnoremap ù % + diff --git a/etc/vim/vimrc.core b/etc/vim/vimrc.core new file mode 100644 index 0000000..b171dcd --- /dev/null +++ b/etc/vim/vimrc.core @@ -0,0 +1,40 @@ +" Smart Defaults +set showcmd " Show (partial) command in status line. +set showmatch " Show matching brackets. +set ignorecase " Do case insensitive matching +set smartcase " Do smart case matching +set incsearch " Incremental search +set autowrite " Automatically save before commands like :next and :make +set hidden " Hide buffers when they are abandoned +set shiftwidth=2 +set tabstop=2 +set expandtab +set number +set relativenumber +filetype plugin indent on + +" Show Status +set laststatus=2 +highlight StatusLine ctermfg=DarkGrey + +" Wild Menu +set wildmenu +set wildmode=list:longest +set wildignore=*.jpg,*.png,*.gif,*.pdf + +" Show Cursor +set cursorline +highlight clear CursorLine +highlight link CursorLine CursorColumn +highlight CursorLineNR cterm=italic + +" Toggle line/relative numbers +nnoremap :set number! +nnoremap :set relativenumber! +highlight LineNr ctermfg=DarkGrey + +" Sudo Write +command! W silent execute 'write !sudo tee ' . shellescape(@%, 1) . ' >/dev/null' + +" Jump to Last Position +au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif diff --git a/etc/vim/vimrc.local b/etc/vim/vimrc.local new file mode 100644 index 0000000..c5bb3c9 --- /dev/null +++ b/etc/vim/vimrc.local @@ -0,0 +1,8 @@ +let additionals = [ "core", "miaou", "rookie", "azerty" ] +for additional in additionals + let s:vimrc_path = "/etc/vim/vimrc." . additional + if filereadable(s:vimrc_path) + execute "source " . expand(s:vimrc_path) + endif +endfor + diff --git a/etc/vim/vimrc.miaou b/etc/vim/vimrc.miaou new file mode 100644 index 0000000..288a03b --- /dev/null +++ b/etc/vim/vimrc.miaou @@ -0,0 +1,3 @@ +" Detect miaou-bash +autocmd BufReadPost,BufNewFile * if getline(1) =~# '^#!.*miaou-bash' | setlocal filetype=bash | endif + diff --git a/etc/vim/vimrc.rookie b/etc/vim/vimrc.rookie new file mode 100644 index 0000000..9980b7d --- /dev/null +++ b/etc/vim/vimrc.rookie @@ -0,0 +1,80 @@ +" ROOKIE vim user +" --------------- + +" Open File and Go to Line under Cursor +nnoremap gf gF + +" Move Along Words +inoremap B +inoremap W +inoremap b +inoremap w +nnoremap b +nnoremap w + +" Move Along Paragraphs +inoremap { +inoremap } +nnoremap { +nnoremap } + +" Delete Words +inoremap db +inoremap d0 +inoremap dw +inoremap d$ +nnoremap db +nnoremap d0 +nnoremap dw +nnoremap d$ + +" Select +nnoremap vh +inoremap vh +nnoremap vl +inoremap vl +nnoremap vk +vnoremap k +inoremap vk +nnoremap vj +vnoremap j +inoremap vj +inoremap v^ +inoremap v^ +nnoremap v$ +inoremap v^ + +" Save +nnoremap :w +inoremap :wa +vnoremap :w + +" Quit +nnoremap :qa +inoremap :qa + +" Slower Scroll Page +nnoremap +nnoremap +vnoremap +vnoremap +inoremap +inoremap + +" Slower Scroll Wheel +nnoremap +nnoremap +vnoremap k +vnoremap j +inoremap +inoremap + +" Move Lines +nnoremap :m .+1== +nnoremap :m .-2== +inoremap :m .+1==gi +inoremap :m .-2==gi +vnoremap :m '>+1gv=gv +vnoremap :m '<-2gv=gv + + diff --git a/init.sh b/init.sh index a02de34..d05515a 100755 --- a/init.sh +++ b/init.sh @@ -4,7 +4,7 @@ MIAOU_BASH_DIR=${MIAOU_BASH_DIR:-/opt/miaou-bash} ORIGINAL="ORIGINAL" -PREDEFINED_CONFIG_FILES=(/etc/bash.bashrc /etc/inputrc /etc/vim/vimrc) +PREDEFINED_CONFIG_FILES=(/etc/bash.bashrc /etc/inputrc) readonly MIAOU_BASH_DIR ORIGINAL # FUNCTIONS diff --git a/install.sh b/install.sh index 93e30e9..90334c1 100755 --- a/install.sh +++ b/install.sh @@ -1,10 +1,10 @@ -#!/bin/bash +#!/usr/bin/env bash ## CONSTANTS -readonly CURDIR=$PWD -readonly REQUIRED_PKGS=(file git bc vim jq) readonly MAIN_TAR_GZ_URL="https://git.artcode.re/miaou/miaou-bash/archive/main.tar.gz" +readonly DESTINATION=/opt/miaou-bash +readonly REQUIRED_PKGS=(file jq) ## FUNCTIONS @@ -16,23 +16,28 @@ function pop_directory { popd || (echo "unable to pop from previous directory" && exit 1) } -function root_required { - [ "$(id -u)" -ne 0 ] && echo 'root privilege required' && exit 1 -} - ## MAIN -root_required +[[ "$UUID" -ne 0 ]] && echo 'root privilege required' && exit 1 + +if [[ -v MIAOU_BASH_DIR ]]; then + miaou-bash "$MIAOU_BASH_DIR/init.sh" +else + MIAOU_BASH_DIR="$DESTINATION" + export MIAOU_BASH_DIR + cd "$(mktemp -d)" + curl --no-progress-meter -O $MAIN_TAR_GZ_URL +fi -if [[ $CURDIR != '/opt/miaou-bash' ]]; then +if [[ $PWD != "$DESTINATION" ]]; then # download and fullfill /opt/miaou-bash, then run it from folder if [[ -L /opt/miaou-bash ]]; then /opt/miaou-bash/install.sh else - rm -rf /opt/miaou-bash + rm -rf "$DESTINATION" - push_directory "$(mktemp -d)" + pushd "$(mktemp -d)" curl --no-progress-meter -O $MAIN_TAR_GZ_URL tar -xzf main.tar.gz mv miaou-bash /opt/ diff --git a/tools/elapsed b/tools/elapsed deleted file mode 100755 index d939471..0000000 --- a/tools/elapsed +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -START=$(date +%s.%N) -eval -- "$*" -END=$(date +%s.%N) -DIFF=$(echo "scale=6; (${END} - ${START}) / 1" | bc) - -printf -- "-----------------\nelapsed seconds = %f\n" "${DIFF}" >&2 diff --git a/vimrc b/vimrc deleted file mode 100644 index a8f433a..0000000 --- a/vimrc +++ /dev/null @@ -1,388 +0,0 @@ -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Maintainer: -" Amir Salihefendic — @amix3k -" -" Awesome_version: -" Get this config, nice color schemes and lots of plugins! -" -" Install the awesome version from: -" -" https://github.com/amix/vimrc -" -" Sections: -" -> General -" -> VIM user interface -" -> Colors and Fonts -" -> Files and backups -" -> Text, tab and indent related -" -> Visual mode related -" -> Moving around, tabs and buffers -" -> Status line -" -> Editing mappings -" -> vimgrep searching and cope displaying -" -> Spell checking -" -> Misc -" -> Helper functions -" -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => General -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Sets how many lines of history VIM has to remember -set history=500 -set nocompatible - -" Enable filetype plugins -filetype plugin on -filetype indent on - -" Set to auto read when a file is changed from the outside -set autoread - -" With a map leader it's possible to do extra key combinations -" like w saves the current file -let mapleader = "," - -" Fast saving -nmap w :w! - -" :W sudo saves the file -" (useful for handling the permission-denied error) -command W w !sudo tee % > /dev/null - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => VIM user interface -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Set 7 lines to the cursor - when moving vertically using j/k -set so=7 - -" Avoid garbled characters in Chinese language windows OS -let $LANG='en' -set langmenu=en -source $VIMRUNTIME/delmenu.vim -source $VIMRUNTIME/menu.vim - -" Turn on the Wild menu -set wildmenu - -" Ignore compiled files -set wildignore=*.o,*~,*.pyc -if has("win16") || has("win32") - set wildignore+=.git\*,.hg\*,.svn\* -else - set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store -endif - -"Always show current position -set ruler - -" Height of the command bar -set cmdheight=2 - -" A buffer becomes hidden when it is abandoned -set hid - -" Configure backspace so it acts as it should act -" set,indent -"set backspace=i -set backspace=indent,eol,start -fixdel - -set whichwrap+=<,>,h,l - -" Ignore case when searching -set ignorecase - -" When searching try to be smart about cases -set smartcase - -" Highlight search results -set hlsearch - -" Makes search act like search in modern browsers -set incsearch - -" Don't redraw while executing macros (good performance config) -set lazyredraw - -" For regular expressions turn magic on -set magic - -" Show matching brackets when text indicator is over them -set showmatch -" How many tenths of a second to blink when matching brackets -set mat=2 - -" No annoying sound on errors -set noerrorbells -set novisualbell -set t_vb= -set tm=500 - -" Properly disable sound on errors on MacVim -if has("gui_macvim") - autocmd GUIEnter * set vb t_vb= -endif - - -" Add a bit extra margin to the left -set foldcolumn=1 - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Colors and Fonts -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Enable syntax highlighting -syntax enable - -" Enable 256 colors palette in Gnome Terminal -if $COLORTERM == 'gnome-terminal' - set t_Co=256 -endif - -try - colorscheme desert -catch -endtry - -set background=dark - -" Set extra options when running in GUI mode -if has("gui_running") - set guioptions-=T - set guioptions-=e - set t_Co=256 - set guitablabel=%M\ %t -endif - -" Set utf8 as standard encoding and en_US as the standard language -set encoding=utf8 - -" Use Unix as the standard file type -set ffs=unix,dos,mac - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Files, backups and undo -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Turn backup off, since most stuff is in SVN, git et.c anyway... -set nobackup -set nowb -set noswapfile - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Text, tab and indent related -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Use spaces instead of tabs -set expandtab - -" Be smart when using tabs ;) -set smarttab - -" 1 tab == 4 spaces -set shiftwidth=4 -set tabstop=4 - -" Linebreak on 500 characters -set lbr -set tw=500 - -set ai "Auto indent -set si "Smart indent -set wrap "Wrap lines -set paste - - -"""""""""""""""""""""""""""""" -" => Visual mode related -"""""""""""""""""""""""""""""" -" Visual mode pressing * or # searches for the current selection -" Super useful! From an idea by Michael Naumann -vnoremap * :call VisualSelection('', '')/=@/ -vnoremap # :call VisualSelection('', '')?=@/ - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Moving around, tabs, windows and buffers -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Map to / (search) and Ctrl- to ? (backwards search) -map / -map ? - -" Disable highlight when is pressed -map :noh - -" Smart way to move between windows -map j -map k -map h -map l - -" Close the current buffer -map bd :Bclose:tabclosegT - -" Close all the buffers -map ba :bufdo bd - -map l :bnext -map h :bprevious - -" Useful mappings for managing tabs -map tn :tabnew -map to :tabonly -map tc :tabclose -map tm :tabmove -map t :tabnext - -" Let 'tl' toggle between this and the last accessed tab -let g:lasttab = 1 -nmap tl :exe "tabn ".g:lasttab -au TabLeave * let g:lasttab = tabpagenr() - - -" Opens a new tab with the current buffer's path -" Super useful when editing files in the same directory -map te :tabedit =expand("%:p:h")/ - -" Switch CWD to the directory of the open buffer -map cd :cd %:p:h:pwd - -" Specify the behavior when switching between buffers -try - set switchbuf=useopen,usetab,newtab - set stal=2 -catch -endtry - -" Return to last edit position when opening files (You want this!) -au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif - - -"""""""""""""""""""""""""""""" -" => Status line -"""""""""""""""""""""""""""""" -" Always show the status line -set laststatus=2 - -" Format the status line -set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Editing mappings -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Remap VIM 0 to first non-blank character -map 0 ^ - -" Move a line of text using ALT+[jk] or Command+[jk] on mac -nmap mz:m+`z -nmap mz:m-2`z -vmap :m'>+`mzgv`yo`z -vmap :m'<-2`>my` - nmap - vmap - vmap -endif - -" Delete trailing white space on save, useful for some filetypes ;) -fun! CleanExtraSpaces() - let save_cursor = getpos(".") - let old_query = getreg('/') - silent! %s/\s\+$//e - call setpos('.', save_cursor) - call setreg('/', old_query) -endfun - -if has("autocmd") - autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() -endif - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Spell checking -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Pressing ,ss will toggle and untoggle spell checking -map ss :setlocal spell! - -" Shortcuts using -map sn ]s -map sp [s -map sa zg -map s? z= - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Misc -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Remove the Windows ^M - when the encodings gets messed up -noremap m mmHmt:%s///ge'tzt'm - -" Quickly open a buffer for scribble -map q :e ~/buffer - -" Quickly open a markdown buffer for scribble -map x :e ~/buffer.md - -" Toggle paste mode on and off -map pp :setlocal paste! - - -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" => Helper functions -""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" Returns true if paste mode is enabled -function! HasPaste() - if &paste - return 'PASTE MODE ' - endif - return '' -endfunction - -" Don't close window, when deleting a buffer -command! Bclose call BufcloseCloseIt() -function! BufcloseCloseIt() - let l:currentBufNum = bufnr("%") - let l:alternateBufNum = bufnr("#") - - if buflisted(l:alternateBufNum) - buffer # - else - bnext - endif - - if bufnr("%") == l:currentBufNum - new - endif - - if buflisted(l:currentBufNum) - execute("bdelete! ".l:currentBufNum) - endif -endfunction - -function! CmdLine(str) - call feedkeys(":" . a:str) -endfunction - -function! VisualSelection(direction, extra_filter) range - let l:saved_reg = @" - execute "normal! vgvy" - - let l:pattern = escape(@", "\\/.*'$^~[]") - let l:pattern = substitute(l:pattern, "\n$", "", "") - - if a:direction == 'gv' - call CmdLine("Ack '" . l:pattern . "' " ) - elseif a:direction == 'replace' - call CmdLine("%s" . '/'. l:pattern . '/') - endif - - let @/ = l:pattern - let @" = l:saved_reg -endfunction