О каких темных углах Вима твоя мама никогда не говорила? [закрыто]

Как уже упоминалось уже несколько людей, для Apple - лучшее место для запуска.

Одна полезная ссылка, о которой я еще не упоминал, - Практическое управление памятью . Вы найдете его в середине документов Apple, если прочитаете их, но это стоит прямой ссылки. Это блестящее резюме правил управления памятью с примерами и распространенными ошибками (в основном, какие другие ответы здесь пытаются объяснить, но не так).

782
задан 22 revs, 6 users 60%Sasha 23 May 2017 в 12:34
поделиться

56 ответов

ПРАКТИЧЕСКОЕ РУКОВОДСТВО: автоматически заполните Ctags при использовании Vim в Bash. Для кого-либо еще, кто использует Vim и Ctags, я записал небольшую функцию auto-completer для Bash. Добавьте следующее в свой ~/.bash_completion, файл (создайте его, если это не существует):

Спасибо переходит к stylishpants для его многих мер и улучшений.

_vim_ctags() {
    local cur prev

    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    case "${prev}" in
        -t)
            # Avoid the complaint message when no tags file exists
            if [ ! -r ./tags ]
            then
                return
            fi

            # Escape slashes to avoid confusing awk
            cur=${cur////\\/}

            COMPREPLY=( $(compgen -W "`awk -vORS=" "  "/^${cur}/ { print \\$1 }" tags`" ) )
            ;;
        *)
            _filedir_xspec
            ;;
    esac
}

# Files matching this pattern are excluded
excludelist='*.@(o|O|so|SO|so.!(conf)|SO.!(CONF)|a|A|rpm|RPM|deb|DEB|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MP?(E)G|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)'

complete -F _vim_ctags -f -X "${excludelist}" vi vim gvim rvim view rview rgvim rgview gview

После того как Вы перезапускаете свою сессию Bash (или создаете новую), можно ввести:

Код:

~$ vim -t MyC<tab key>

и это автоматически заполнит тег тем же путем, это делает для файлов и каталогов:

Код:

MyClass MyClassFactory
~$ vim -t MyC

Я нахожу это действительно полезным, когда я вскакиваю в быстрое исправление ошибки.

8
ответ дан 22 November 2019 в 21:19
поделиться

Заменить все

  :%s/oldtext/newtext/igc

Дать, чтобы заменить все:)

2
ответ дан 22 November 2019 в 21:19
поделиться

Используйте правую кнопку мыши для переключения режима вставки в gVim со следующими настройками в ~ / .gvimrc:

"
"------------------------------------------------------------------
" toggle insert mode <--> 'normal mode with the <RightMouse>-key
"------------------------------------------------------------------
nnoremap  <RightMouse> <Insert>
inoremap  <RightMouse> <ESC>
"
2
ответ дан 22 November 2019 в 21:19
поделиться

I often want to highlight a particular word/function name, but don't want to search to the next instance of it yet:

map m* *#
9
ответ дан 22 November 2019 в 21:19
поделиться

Вот что-то не очевидное. Если у Вас есть много пользовательских плагинов / расширения в Вашем $HOME, и необходимо работать от su / sudo/... иногда, то это могло бы быть полезно.

В Вашем ~/.bashrc:

export VIMINIT=":so $HOME/.vimrc"

В Вашем ~/.vimrc:

if $HOME=='/root'
        if $USER=='root'
                if isdirectory('/home/your_typical_username')
                        let rtuser = 'your_typical_username'
                elseif isdirectory('/home/your_other_username')
                        let rtuser = 'your_other_username'
                endif
        else
                let rtuser = $USER
        endif
        let &runtimepath = substitute(&runtimepath, $HOME, '/home/'.rtuser, 'g')
endif

Это позволит Вашим локальным плагинам загружаться - безотносительно способа, которым Вы используете для изменения пользователя.

Вы также хотели бы вынимать *.swp файлы из своего текущего пути и в ~/vimtmp (это входит в .vimrc):

if ! isdirectory(expand('~/vimtmp'))
   call mkdir(expand('~/vimtmp'))
endif
if isdirectory(expand('~/vimtmp'))
   set directory=~/vimtmp
else
   set directory=.,/var/tmp,/tmp
endif

Кроме того, некоторые отображения, которые я использую для создания редактирования легче - заставляют ctrl+s работать как Escape, и ctrl+h/l переключают вкладки:

inoremap <C-s> <ESC>
vnoremap <C-s> <ESC>
noremap <C-l> gt
noremap <C-h> gT

11
ответ дан 22 November 2019 в 21:19
поделиться

Я был уверен, что кто-то уже опубликовал бы это, но здесь идет.

Возьмите любую систему сборки, какую пожелаете; сделай, мвн, муравей, что угодно. В корне каталога проекта создайте файл команд, которые вы используете постоянно, например:

mvn install
mvn clean install
... и т. д.

Чтобы сделать сборку, наведите курсор на строку и введите !! sh. Т.е. отфильтруйте эту строку; запишите его в оболочку и замените его результатами.

Журнал сборки заменяет строку, готовую к прокрутке, поиску и т. Д.

Когда вы закончите просматривать журнал, введите u, чтобы отменить, и вы вернетесь к своему файлу команд.

6
ответ дан 22 November 2019 в 21:19
поделиться

Я использую Vim для всего. Когда я редактирую сообщение электронной почты, я широко использую:

gqap (или gwap )

, чтобы легко и правильно переформатировать по параграфам, даже с цитатой вводных символов. Для достижения этой функциональности я также добавляю:

-c 'set fo = tcrq' -c 'set tw = 76'

к команде для внешнего вызова редактора. Одним примечательным дополнением будет добавление « a » к параметру fo (formatoptions). Это автоматически переформатирует абзац при вводе и перемещении по содержимому, но может помешать или вызвать проблемы с ошибочным или нечетным форматированием, содержащимся в сообщении.

7
ответ дан 22 November 2019 в 21:19
поделиться

Чтобы сделать vim немного более похожим на редактор IDE:

  • set nu - для номеров строк в левом поле.
  • set cul - выделяет строку, содержащую курсор.
]
3
ответ дан 22 November 2019 в 21:19
поделиться

Хотите IDE?

: make запустит makefile в текущем каталоге, проанализируйте вывод компилятора, затем вы можете использовать : cn и : cp , чтобы пройти через ошибки компилятора, открывая каждый файл и ища нужный номер строки.

: syntax on включает подсветку синтаксиса vim.

10
ответ дан 22 November 2019 в 21:19
поделиться

Ctrl-n в режиме вставки автоматически завершит вводимое вами слово на основе всех слов, находящихся в открытых буферах. Если совпадений несколько, он предоставит вам список возможных слов, которые вы можете циклически перебирать, используя ctrl-n и ctrl-p.

11
ответ дан 22 November 2019 в 21:19
поделиться

: setlocal autoread

Автоматически перезагружает текущий буфер ... особенно полезно при просмотре файлов журналов и почти выполняет функции "хвостовой" программы в unix из vim.

Проверка ошибок компиляции из vim. установите переменную makeprg в зависимости от языка, скажем, для perl

: setlocal makeprg = perl \ -c \%

Для PHP

установите makeprg = php \ -l \%
set errorformat =% m \ in \% f \ on \ line \% l

Выполнение команды ": make" запускает связанный makeprg и отображает ошибки / предупреждения компиляции в окне quickfix и может легко переходить к соответствующим номерам строк.

7
ответ дан 22 November 2019 в 21:19
поделиться

: sp%: h - список каталогов / file-chooser, использующий каталог текущего файла

(относится как комментарий к совету rampion cd , но У меня еще нет прав на комментирование)

4
ответ дан 22 November 2019 в 21:19
поделиться
==========================================================
In normal mode
==========================================================
gf ................ open file under cursor in same window --> see :h path
Ctrl-w f .......... open file under cursor in new window
Ctrl-w q .......... close current window
Ctrl-w 6 .......... open alternate file --> see :h #
gi ................ init insert mode in last insertion position
'0 ................ place the cursor where it was when the file was last edited
6
ответ дан 22 November 2019 в 21:19
поделиться

Ни то, ни другое не является несгибаемым, но я считаю его чрезвычайно полезным.

Тривиальные привязки, но я просто не могу без них жить. Он включает перемещение в стиле hjkl в режиме вставки (с помощью клавиши ctrl). В обычном режиме: ctrl-k / j прокручивает половину экрана вверх / вниз, а ctrl-l / h переходит к следующему / предыдущему буферу. Отображения µ и ù специально предназначены для клавиатуры AZERTY и переходят к следующей / предыдущей ошибке make.

imap <c-j> <Down>
imap <c-k> <Up>
imap <c-h> <Left>
imap <c-l> <Right>
nmap <c-j> <c-d>
nmap <c-k> <c-u>
nmap <c-h> <c-left>
nmap <c-l> <c-right>

nmap ù :cp<RETURN>
nmap µ :cn<RETURN>

Небольшая функция, которую я написал для выделения функций, глобальных переменных, макросов, структур и определений типов. (Может быть медленным для очень больших файлов). Каждый тип выделяется по-разному (см. ": Help group-name", чтобы получить представление о текущих настройках вашей цветовой темы) Использование: сохраните файл с помощью ww (по умолчанию "\ ww"). Для этого вам нужны ctags.

nmap <Leader>ww :call SaveCtagsHighlight()<CR>

"Based on: http://stackoverflow.com/questions/736701/class-function-names-highlighting-in-vim
function SaveCtagsHighlight()
    write

    let extension = expand("%:e")
    if extension!="c" && extension!="cpp" && extension!="h" && extension!="hpp"
        return
    endif

    silent !ctags --fields=+KS *
    redraw!

    let list = taglist('.*')
    for item in list
        let kind = item.kind

        if     kind == 'member'
            let kw = 'Identifier'
        elseif kind == 'function'
            let kw = 'Function'
        elseif kind == 'macro'
            let kw = 'Macro'
        elseif kind == 'struct'
            let kw = 'Structure'
        elseif kind == 'typedef'
            let kw = 'Typedef'
        else
            continue
        endif

        let name = item.name
        if name != 'operator=' && name != 'operator ='
            exec 'syntax keyword '.kw.' '.name
        endif
    endfor
    echo expand("%")." written, tags updated"
endfunction

У меня есть привычка писать много кода и функций, и я не люблю писать для них прототипы. Итак, я создал некоторую функцию для создания списка прототипов в исходном файле в стиле C. Он бывает двух видов: один удаляет формальное имя параметра, а другой сохраняет его. Я просто обновляю весь список каждый раз, когда мне нужно обновить прототипы. Это позволяет избежать несинхронизации прототипов и определений функций. Также требуются ctags.

"Usage: in normal mode, where you want the prototypes to be pasted:
":call GenerateProptotypes()
function GeneratePrototypes()
    execute "silent !ctags --fields=+KS ".expand("%")
    redraw!
    let list = taglist('.*')
    let line = line(".")
    for item in list
        if item.kind == "function"  &&  item.name != "main"
            let name = item.name
            let retType = item.cmd
            let retType = substitute( retType, '^/\^\s*','','' )
            let retType = substitute( retType, '\s*'.name.'.*', '', '' ) 

            if has_key( item, 'signature' )
                let sig = item.signature
                let sig = substitute( sig, '\s*\w\+\s*,',        ',',   'g')
                let sig = substitute( sig, '\s*\w\+\(\s)\)', '\1', '' )
            else
                let sig = '()'
            endif
            let proto = retType . "\t" . name . sig . ';'
            call append( line, proto )
            let line = line + 1
        endif
    endfor
endfunction


function GeneratePrototypesFullSignature()
    "execute "silent !ctags --fields=+KS ".expand("%")
    let dir = expand("%:p:h");
    execute "silent !ctags --fields=+KSi --extra=+q".dir."/* "
    redraw!
    let list = taglist('.*')
    let line = line(".")
    for item in list
        if item.kind == "function"  &&  item.name != "main"
            let name = item.name
            let retType = item.cmd
            let retType = substitute( retType, '^/\^\s*','','' )
            let retType = substitute( retType, '\s*'.name.'.*', '', '' ) 

            if has_key( item, 'signature' )
                let sig = item.signature
            else
                let sig = '(void)'
            endif
            let proto = retType . "\t" . name . sig . ';'
            call append( line, proto )
            let line = line + 1
        endif
    endfor
endfunction
2
ответ дан 22 November 2019 в 21:19
поделиться

Непосредственно перед копированием и вставкой в ​​stackoverflow:

:retab 1
:% s/^I/ /g
:% s/^/    /

Теперь скопируйте и вставьте код.

В соответствии с просьбой в комментариях:

retab 1. Это устанавливает размер табуляции равным единице. Но он также просматривает код и добавляет дополнительные табуляции и пробелы, чтобы при форматировании не перемещался какой-либо фактический текст (т.е. текст после ratab выглядит так же).

% s / ^ I / / g: Обратите внимание на ^ I - результат нажатия на вкладку. Это ищет все вкладки и заменяет их одним пробелом. Так как мы только что сделали ретаб, это не должно привести к изменению форматирования, но поскольку вставка вкладок на веб-сайт происходит случайно, их хорошо удалить.

% s / ^ / /: Замените начало строки на четыре пробелы. Поскольку на самом деле вы не можете заменить начало строки чем-либо, он вставляет четыре пробела в начале строки (это необходимо для форматирования SO, чтобы выделить код).

4
ответ дан 22 November 2019 в 21:19
поделиться

Due to the latency and lack of colors (I love color schemes :) I don't like programming on remote machines in PuTTY. So I developed this trick to work around this problem. I use it on Windows.

You will need

  • 1x gVim
  • 1x rsync on remote and local machines
  • 1x SSH private key auth to the remote machine so you don't need to type the password
  • 1x Pageant
  • 1x PuTTY

Setting up remote machine

Configure rsync to make your working directory accessible. I use an SSH tunnel and only allow connections from the tunnel:

address = 127.0.0.1
hosts allow = 127.0.0.1
port = 40000
use chroot = false
[bledge_ce]
    path = /home/xplasil/divine/bledge_ce
    read only = false

Then start rsyncd: rsync --daemon --config=rsyncd.conf

Setting up local machine

Install rsync from Cygwin. Start Pageant and load your private key for the remote machine. If you're using SSH tunelling, start PuTTY to create the tunnel. Create a batch file push.bat in your working directory which will upload changed files to the remote machine using rsync:

rsync --blocking-io *.cc *.h SConstruct rsync://localhost:40001/bledge_ce

SConstruct is a build file for scons. Modify the list of files to suit your needs. Replace localhost with the name of remote machine if you don't use SSH tunelling.

Configuring Vim Теперь это легко. Мы будем использовать функцию быстрого исправления (: make и список ошибок), но компиляция будет выполняться на удаленной машине. Итак, нам нужно установить makeprg:

set makeprg=push\ &&\ plink\ -batch\ xplasil@anna.fi.muni.cz\ \"cd\ /home/xplasil/divine/bledge_ce\ &&\ scons\ -j\ 2\"

Это сначала запустит задачу push.bat для загрузки файлов, а затем выполнит команды на удаленном компьютере с использованием SSH ( Plink из набора PuTTY). Команда сначала меняет каталог на рабочий каталог, а затем запускает сборку (я использую scons).

Результаты сборки будут удобно отображаться в вашем локальном списке ошибок gVim.

6
ответ дан 22 November 2019 в 21:19
поделиться

При работе над проектом, где процесс сборки медленный, я всегда собираю в фоновом режиме и передаю вывод в файл под названием errors.err (что-то вроде сделайте отладку 2>&1 | tee errors.err). Это позволяет мне продолжить редактирование или просмотр исходного кода во время сборки. Когда он будет готов (используя pynotify на GTK, чтобы сообщить мне, что он завершен), я могу посмотреть на результат в vim, используя quickfix. Начните с выдачи :cf[ile], который читает файл ошибки и переходит к первой ошибке. Лично мне нравится использовать cwindow для получения результата сборки в отдельном окне.

4
ответ дан 22 November 2019 в 21:19
поделиться

Не делайте этого. 8 символов пути слишком длинны для случайного сайта, а пользователи мерзнут. Любое требование, которое вы предъявляете к сложности пароля, лишит вас пользователей.

Если вы не являетесь банком, вам не следует навязывать какие-либо сложности паролей. Если пользователь хочет букву 'а' в качестве своего пароля, пусть идет на это. Когда он обнаруживает, что какая-то вредоносная сущность укорачивает urls в его имени (или что делает ваш сайт), он может справиться с этим и, возможно, извлечь хороший урок.

Важно помнить, что это не ваша проблема, и вы можете только разозлить людей, усилив сложность.

-121--3774738-

Слишком прочный элемент отсутствует. Формат HTML «Sanitizing» является жестким . Любые углы, которые вы режете, чтобы обработать его более просто, скорее всего, приведет к эксплойтам прокрадывания. Даже сложный старый HTMLPurifier, с его лучшей репутацией, имел несколько способов прокрасть опасную разметку в прошлом!

Однако, если ваше решение для разметки текста способно выводить опасный HTML, то оно является дефицитным и должно быть заменено IMO. Если PHP уценка позволяет javascript: URL через то это довольно прискорбный, основной недостаток, и я не думаю, что я бы поверил ему, чтобы получить что-то еще правильно.

-121--4780271-

Несколько полезных:

:set nu # displays lines
:44     # go to line 44
'.      # go to last modification line

Мой любимый: Ctrl + n WORD COMPLETION!

4
ответ дан 22 November 2019 в 21:19
поделиться
gg=G

Исправляет отступы для всего файла. Мне не хватало моего надежного в Eclipse, но я только что узнал, что vim отлично справляется с этим.

10
ответ дан 22 November 2019 в 21:19
поделиться

Вот некоторые из моих обязательных элементов:

cscope + ctags + vim, которые можно найти в Интернете.

Некоторые сокращения для быстрого запуска новых файлов кода, такие как:

ab cpph #include <iostream><CR>#include <string><CR>#include <cstdlib><CR>#include <cassert><CR>#include <vector><CR>#include <
stdexcept><CR>using namespace std;<CR>int main(int argc, char *argv[]) {
ab perlh #!/usr/bin/perl<CR>use strict;<CR>use warnings;<CR>
ab chdr #include <stdio.h><CR>#include <sys/types.h><CR>#include <unistd.h><CR>#include <stdlib.h><CR>#include <sys/stat.h><CR>
#include <sys/wait.h><CR>#include <string.h><CR>int main(int argc, char *argv[]) {
ab xhtmlhdr <?xml version="1.0" encoding="UTF-8"?><CR><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.o
rg/TR/xhtml1/DTD/xhtml1-strict.dtd"><CR><html xmlns="http://www.w3.org/1999/xhtml"><CR>  <head><CR>  <title></title><CR><link h
ref="style.css" rel="STYLESHEET" type="text/css"><CR></head>

Например, cpph вставит базовый каркас файла main.cc

. Также есть мое отображение функциональных клавиш:

map <F1> <Esc>:w<CR>:perl $e = `./error.pl`; my ($f,$l,@w) = split(":",$e); my $w=join(":",@w); $curwin->Cursor($l,0); VIM::Msg($w);<CR>
map <F2> :wincmd w<CR>
map <F3> :wincmd s<CR>
map <F4> :wincmd v<CR>
map <F5> :wincmd o<CR>
map <F6> :sball<CR>
map <F7> :wq<CR>
map <F8> :wincmd q<CR>
map <F9> :wincmd -<CR>
map <F10> :wincmd +<CR>
map <F11> :wincmd <<CR>
map <F12> :wincmd ><CR>

В этом случае мой F1 сопоставлен, чтобы навести курсор на следующую ошибку, которая должна быть исправлен для миграции исходного кода.

map _ ebi"^[ea"^[

Эта карта заставит _ заключить в кавычки строку

1
ответ дан 22 November 2019 в 21:19
поделиться

Сопоставления для выполнения движений на текущей строке экрана в режиме переноса. Некоторое время назад я обнаружил это в комментарии к совету Vim, и он оказался весьма удобным.

function! ScreenMovement(movement)
  if &wrap
    return "g" . a:movement
  else
    return a:movement
  endif
endfunction
onoremap <silent> <expr> j ScreenMovement("j")
onoremap <silent> <expr> k ScreenMovement("k")
onoremap <silent> <expr> 0 ScreenMovement("0")
onoremap <silent> <expr> ^ ScreenMovement("^")
onoremap <silent> <expr> $ ScreenMovement("$")
nnoremap <silent> <expr> j ScreenMovement("j")
nnoremap <silent> <expr> k ScreenMovement("k")
nnoremap <silent> <expr> 0 ScreenMovement("0")
nnoremap <silent> <expr> ^ ScreenMovement("^")
nnoremap <silent> <expr> $ ScreenMovement("$")
1
ответ дан 22 November 2019 в 21:19
поделиться

для этого потока

Для префикса набора строк я использую один из двух разных подходов:

Один из подходов - это выбор блока (упомянутый sth). В общем, вы можете выбрать прямоугольную область с помощью ctrl-V с последующим перемещением курсора. Как только вы выделили прямоугольник, нажатие Shift-I вставит символы в левую часть прямоугольника или shift-A добавит их в правую сторону прямоугольника. Таким образом, вы можете использовать этот метод для создания прямоугольника, включающего крайний левый столбец строк, которые вы хотите префикс, нажмите shift-I, введите префикс, а затем нажмите escape.

Другой подход - использовать подстановку. (как упомянул Брайан Агнью). Подстановка Брайана повлияет на весь файл (% в команде означает «все строки»). Чтобы повлиять только на несколько строк, самый простой способ - нажать shift-V (который включает режим визуальной строки) в первой / последней строке, а затем перейти к последней / первой строке. Затем введите:

: s / ^ / ВАШ ПРЕФИКС /

^ - это регулярное выражение (в данном случае начало строки). Набрав это в режиме визуальной линии, вы увидите, что перед s автоматически вставляется '<,'>. Это означает, что диапазон подстановки будет визуальным выбором.

Дополнительный совет: если ваш префикс содержит косые черты, вы можете либо экранировать их с помощью обратной косой черты, либо использовать другой символ пунктуации в качестве разделителя в команде. Например, чтобы добавить комментарии к строкам C ++, я обычно пишу:

: s: ^: //:

Для добавления суффикса метод замены обычно проще, если все ваши строки не имеют точно одинаковой длины. Просто используйте $ для шаблона вместо ^, и ваша строка будет добавлена ​​вместо префикса.

Если вы хотите добавить префикс и суффикс одновременно, вы можете сделать что-то вроде этого:

: s /. * / PREFIX & SUFFIX /

. * Соответствует всей строке. Символ & в замене возвращает совпадающий текст (всю строку), но теперь к нему будут добавлены ваш префикс и суффикс.

Кстати: при комментировании кода вы, вероятно, захотите раскомментировать его позже. Вы можете использовать visual-block (ctrl-V), чтобы выбрать косые черты, а затем нажать d, чтобы удалить их, или вы можете использовать подстановку (возможно, с визуальным выбором строки, сделанным с помощью shift-V), чтобы удалить ведущие косые черты, как это :

: s: // ::

s /.*/ ПРЕФИКС И СУФФИКС /

. * соответствует всей строке. Символ & в замене возвращает совпадающий текст (всю строку), но теперь к нему будут добавлены ваш префикс и суффикс.

Кстати: при комментировании кода вы, вероятно, захотите раскомментировать его позже. Вы можете использовать visual-block (ctrl-V), чтобы выбрать косые черты, а затем нажать d, чтобы удалить их, или вы можете использовать подстановку (возможно, с визуальным выбором строки, сделанным с помощью shift-V), чтобы удалить ведущие косые черты, как это :

: s: // ::

s /.*/ ПРЕФИКС И СУФФИКС /

. * соответствует всей строке. & В замене возвращает совпадающий текст (всю строку), но теперь к нему будут добавлены ваш префикс и суффикс.

Кстати: при комментировании кода вы, вероятно, захотите раскомментировать его позже. Вы можете использовать visual-block (ctrl-V), чтобы выбрать косые черты, а затем нажать d, чтобы удалить их, или вы можете использовать подстановку (возможно, с визуальным выбором строки, сделанным с помощью shift-V), чтобы удалить ведущие косые черты, как это :

: s: // ::

1
ответ дан 22 November 2019 в 21:19
поделиться

Моя использует макросы вместо поиска - иногда более эффективно комбинировать макрос с визуальным режимом.

1
ответ дан 22 November 2019 в 21:19
поделиться

Попробуйте использовать perltidy для форматирования с помощью = команды нормального режима

:set equalprg=perltidy
2
ответ дан 22 November 2019 в 21:19
поделиться

Я собирал их годами.

" Pasting in normal mode should append to the right of cursor
nmap <C-V>      a<C-V><ESC>
" Saving
imap <C-S>      <C-o>:up<CR>
nmap <C-S>      :up<CR>
" Insert mode control delete
imap <C-Backspace> <C-W>
imap <C-Delete> <C-O>dw
nmap    <Leader>o       o<ESC>k
nmap    <Leader>O       O<ESC>j
" tired of my typo
nmap :W     :w
2
ответ дан 22 November 2019 в 21:19
поделиться

Создайте функцию для выполнения текущего буфера, используя его shebang (если он установлен), и вызовите ее с помощью crtl-x.

map <C-X> :call CallInterpreter()<CR>

au BufEnter *
\ if match (getline(1) , '^\#!') == 0 |
\   execute("let b:interpreter = getline(1)[2:]") |
\ endif

fun! CallInterpreter()
    if exists("b:interpreter")
        exec("! ".b:interpreter." %")
    endif
endfun
2
ответ дан 22 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: