Vim
Vim - это текстовый редактор, однажды подсев на который, потом уже не слезешь. В конце страницы будут попытки объяснения для новичков, а тут сходу настройки для удобного его применения.
Стоит сказать что создав файл ~/.vimrc
, мы тут же отключаем все настройки по умолчанию и поэтому первые строки возвращают их на место.
Общие настройки
" FreeBSD
source $VIMRUNTIME/defaults.vim
source $VIMRUNTIME/defaults_freebsd.vim
" Отключить переход в визуальный режим при выделении мышью
set mouse-=a
" Отключить создание мусорных файлов
set nobackup
set nowritebackup
set noswapfile
" Номера строк
set number
" Подсвечивать искомое
set hlsearch
" Игнорировать регистр при поиске
set ignorecase
" не прыгать сразу к искомому
" set noincsearch
" Сброс подсветки найденного
nnoremap q :noh<CR>
" Пробелы вместо табов
set expandtab
set shiftwidth=4
set tabstop=4
" Убрать правый скролл r
" Убрать левый скролл при вертикальном разделении L
set guioptions-=rL
" Шрифт в GUI-режиме
set guifont=Hack
" Вертикальный курсор для режима вставки
let &t_SI = "\e[5 q"
" Блочный курсор для нормального режима
let &t_EI = "\e[1 q"
" Подчёркнутый курсор для режима замены
let &t_SR = "\e[3 q"
" Для плагина переключающего раскладку
" А для dwm есть патч, чтобы отдельные раскладки в каждом окне
let g:XkbSwitchEnabled = 1
let g:XkbSwitchNLayout = 'us'
" Сохранение закладок
set viminfo='1000,<1000,s30,h
function! AiOff()
let g:autoindent_status = &autoindent
setlocal noautoindent
endfunction
function! AiOn()
let &autoindent = g:autoindent_status
endfunction
" pkg install xclip
" autoindent при вставке нужно отключать не только для вставки кода
" даже текст начинает ехать лесенкой
function! CopyToClipboard()
"get the position of left start visual selection
let [line_start, column_start] = getpos("'<")[1:2]
"get the position of right end visual selection
let [line_end, column_end] = getpos("'>")[1:2]
"gotta catch them all.
let lines = getline(line_start, line_end)
if len(lines) == 0
return ''
endif
"edge cases and cleanup.
let lines[-1] = lines[-1][: column_end - 0]
let lines[0] = lines[0][column_start - 1:]
let filename = '/tmp/vim_clipboard.txt'
call writefile(lines, filename)
silent! execute '!truncate -s -1 ' . filename
silent! execute '!xclip -selection clipboard ' . filename
endfunction
vnoremap <C-c> :call CopyToClipboard()<CR>
nnoremap <C-v> :call AiOff()<CR>:execute "normal! i" . system("xclip -selection clipboard -o")<CR>:call AiOn()<CR>
inoremap <C-v> <Esc>:call AiOff()<CR>:execute "normal! a" . system("xclip -selection clipboard -o")<CR>:call AiOn()<CR>a
" для ру
vnoremap <C-с> :call CopyToClipboard()<CR>
nnoremap <C-м> :call AiOff()<CR>:execute "normal! i" . system("xclip -selection clipboard -o")<CR>:call AiOn()<CR>
inoremap <C-м> <Esc>:call AiOff()<CR>:execute "normal! a" . system("xclip -selection clipboard -o")<CR>:call AiOn()<CR>a
" Копирование и вставка для Windows
" function! AiOff()
" let g:autoindent_status = &autoindent
" setlocal noautoindent
" endfunction
" function! AiOn()
" let &autoindent = g:autoindent_status
" endfunction
" vnoremap <C-c> "*y
" inoremap <C-v> <C-o>:call AiOff()<CR><C-r>+<C-o>:call AiOn()<CR>
" nnoremap <C-v> :call AiOff()<CR>"+gP:call AiOn()<CR>
Переключатель раскладки
Создаем папки ~/.vim/autoload/
и ~/.vim/plugin/
, отсюда https://github.com/lyokha/vim-xkbswitch берем файлы из этих папок и кидаем к себе. Этот плагин переключает раскладку клавиатуры на английскую при переходе к режимам где кирилица просто не нужна и только мешает.
Единственный плагин который решает проблему вима с раскладками по настоящему хорошо, без всяких "но".
Для Windows кроме плагина нужно скачать libxkbswitch64.dll и кинуть рядом с vim.exe.
Кроме того файлы помещать в папки autoload и plugin которые в $VIMRUNTIME, узнать где это, можно выполнив в vim команду :echo $VIMRUNTIME
.
Открытие файлов .gpg
С помощью команды gpg -c file.txt
можно шифровать файлы. И потом с помощью плагина к vim открывать их сразу в редакторе. Аналогичным образом берем два файла отсюда https://github.com/jamessan/vim-gnupg и кидаем их в папки autoload и plugin.
Для новичка:
Открытие, редактирование, закрытие
При запуске вима не получится прямо сходу набирать текст - потому что он запускается в командном режиме где каждое нажатие клавиши является командой. Чтобы переключить его в режим ввода текста нужно нажать i. Чтобы переключиться обратно в командный - нужно нажать Esc.
Создание файла, открытие файла, сохранение файла и закрытие редактора выполняются в командном режиме. Часть команд выполняется обычными нажатиями на клавиши букв. А более сложные начинаются с двоеточия. При нажатии на двоеточие внизу окна появляется поле ввода команды и ее параметров.
Открыть файл
:e путь/к/файлу
Затем i чтобы начать редактировать, Esc чтобы завершить редактирование и записать
:w
При записи можно указать новое имя и сохранить файл в другое место.
Закрыть редактор можно командой
:q
Но если вы не сохранили файл, то будет предупреждение, либо сохраните файл, либо добавьте восклицательный знак чтобы отбросить изменения
:q!
На вышеприведенном скриншоте внешний вид приведен в порядок благодаря шрифту и цветовой схеме. Шрифт устанавливается командой
pkg install jetbrains-mono
А цветовая схема взята отсюда https://github.com/sonph/onehalf/tree/master/vim/colors - эти файлы нужно кинуть в папку ~/.vim/colors/
Теперь, чтобы их задействовать, нужно создать файл ~/.vimrc
и прописать туда
source $VIMRUNTIME/defaults.vim
source $VIMRUNTIME/defaults_freebsd.vim
colorscheme onehalfdark
set guifont=JetBrainsMono\ Regular
После того как появился файл ~/.vimrc
все предыдущие настройки перестают загружаться и чтобы их вернуть и нужны первые две строчки. Можете потренироваться использованию редактора прямо на файле настроек.
Вкладки
Vim даже в консольном режиме поддерживает вкладки. Открыть файл в новой вкладке:
:tabnew ~/file_name.txt
.
Можно переходить к следующей клавишами gt
или к предыдущей клавишами gT
или к конкретной по номеру 2gt
. Список вкладок можно посмотреть командой :tabs
.
Команда :tabmove
переместит вкладку вправо в конец. Команда :tabmove 0
переместит вкладку в начало.