Vim - открыть набор файлов с вкладками [duplicate]

В основном функция mail() отключена на общем хостинге. Лучше использовать SMTP. Лучшим вариантом будет Gmail или SendGrid.


SMTPconfig.php

<?php 
    $SmtpServer="smtp.*.*";
    $SmtpPort="2525"; //default
    $SmtpUser="***";
    $SmtpPass="***";
?>

SMTPmail.php

<?php
class SMTPClient
{

    function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
    {

        $this->SmtpServer = $SmtpServer;
        $this->SmtpUser = base64_encode ($SmtpUser);
        $this->SmtpPass = base64_encode ($SmtpPass);
        $this->from = $from;
        $this->to = $to;
        $this->subject = $subject;
        $this->body = $body;

        if ($SmtpPort == "") 
        {
            $this->PortSMTP = 25;
        }
        else
        {
            $this->PortSMTP = $SmtpPort;
        }
    }

    function SendMail ()
    {
        $newLine = "\r\n";
        $headers = "MIME-Version: 1.0" . $newLine;  
        $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  

        if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)) 
        {
            fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n"); 
            $talk["hello"] = fgets ( $SMTPIN, 1024 ); 
            fputs($SMTPIN, "auth login\r\n");
            $talk["res"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpUser."\r\n");
            $talk["user"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpPass."\r\n");
            $talk["pass"]=fgets($SMTPIN,256);
            fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n"); 
            $talk["From"] = fgets ( $SMTPIN, 1024 ); 
            fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n"); 
            $talk["To"] = fgets ($SMTPIN, 1024); 
            fputs($SMTPIN, "DATA\r\n");
            $talk["data"]=fgets( $SMTPIN,1024 );
            fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\n".$headers."\n\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
            $talk["send"]=fgets($SMTPIN,256);
            //CLOSE CONNECTION AND EXIT ... 
            fputs ($SMTPIN, "QUIT\r\n"); 
            fclose($SMTPIN); 
            // 
        } 
        return $talk;
    } 
}
?>

contact_email.php

<?php 
include('SMTPconfig.php');
include('SMTPmail.php');
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $to = "";
    $from = $_POST['email'];
    $subject = "Enquiry";
    $body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
    $SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
    $SMTPChat = $SMTPMail->SendMail();
}
?>
335
задан Ciro Santilli 新疆改造中心 六四事件 法轮功 24 March 2016 в 12:34
поделиться

14 ответов

Вы хотите что-то вроде

:mksession ~/mysession.vim

. Затем вы можете загрузить этот vim-файл, и у вас будет старый сеанс:

:source ~/mysession.vim

или откройте vim с помощью -S:

$ vim -S ~/mysession.vim
454
ответ дан jinowolski 21 August 2018 в 20:35
поделиться
  • 1
    Ooo, и я почти забыл, что вы можете загрузить его, набрав: gvim -S ~ / mysession.vim – Benj 29 October 2009 в 11:01
  • 2
    Спасибо @Benj. Я новичок в vim. Как я могу 'source' в командной строке? – Jogusa 29 October 2009 в 11:17
  • 3
    По электронной почте Ой! Извините, Бендж, я имел в виду командный режим. Я уже нашел это: ``: source ~ / mysession.vim''. – Jogusa 29 October 2009 в 11:43
  • 4
    Short is: so ~ / file. Если вам посчастливилось загрузить исходный файл, просто: так что% сделает вашу работу. – Daniel Baulig 27 April 2011 в 23:53
  • 5
    Если вы не укажете имя файла сеанса, по умолчанию оно будет записано и прочитано с Session.vim. Поэтому, если вы хотите иметь только один сеанс, сохраненный в текущем каталоге, вы можете использовать :mksession или :mks из vim, чтобы сохранить текущий сеанс, и просто vim -S, чтобы открыть его. – anishpatel 17 March 2015 в 18:03

Лично я просто обернуваю плагин Obsession Тима Папа, чтобы разрешить определение sessiondir и не набирать путь:

let g:sessiondir = $HOME . ".vim/sessions"

command! -nargs=1 MkSession call MkSession(<f-args>)
function! MkSession(sessionfile)
  if !isdirectory(g:sessiondir)
    call mkdir(g:sessiondir, "p")
  endif
  exe 'Obsession' g:sessiondir . '/' . a:sessionfile
endfunction

command! -nargs=1 LoadSession call LoadSession(<f-args>)
function! LoadSession(sessionfile)

  let a:sessionpath = g:sessiondir . a:sessionfile
  if (filereadable(a:sessionpath))
    exe 'source ' a:sessionpath
  else
    echo "No session loaded."
  endif
endfunction
1
ответ дан archf 21 August 2018 в 20:35
поделиться
  • 1
    У меня были особые проблемы с плагином и сессиями авиакомпании. Переключение на использование Obsession устранило проблемы, это была удивительная находка после нескольких недель борьбы. См. github.com/vim-airline/vim-airline/issues/… – icc97 28 May 2018 в 00:50

Если вы хотите автоматизировать процесс без использования каких-либо плагинов, вы можете использовать Уйти и вернуться из Vim Tips Wiki .

Каждый вы выйдете из Vim, он сохранит текущую сессию под ~/.vim/sessions и снова загрузит ее после открытия Vim.

Просто отредактируйте свой файл ~/.vimrc и добавьте следующее. Если вы открываете Vim из разных каталогов, вы будете иметь разные сеансы, что очень полезно при работе над разными проектами. :

function! MakeSession()
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  if (filewritable(b:sessiondir) != 2)
    exe 'silent !mkdir -p ' b:sessiondir
    redraw!
  endif
  let b:filename = b:sessiondir . '/session.vim'
  exe "mksession! " . b:filename
endfunction

function! LoadSession()
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  let b:sessionfile = b:sessiondir . "/session.vim"
  if (filereadable(b:sessionfile))
    exe 'source ' b:sessionfile
  else
    echo "No session loaded."
  endif
endfunction

" Adding automatons for when entering or leaving Vim
au VimEnter * nested :call LoadSession()
au VimLeave * :call MakeSession()

Даже для новичка этот скрипт несколько легко понять и настроить.

Обратите внимание, что этот скрипт будет работать только для Unix-систем (MacOS / Linux), он должен быть адаптирован для работы в Windows.


UPDATE: добавив предложение 0xc0de , вы можете заменить строку VimEnter для эти, если вы хотите, чтобы Vim загружал сеанс, только если аргументы не предоставлены:

if(argc() == 0)
  au VimEnter * nested :call LoadSession()
endif
12
ответ дан Community 21 August 2018 в 20:35
поделиться
  • 1
    Вы можете открыть сеанс только в том случае, если для vim нет аргументов. if argc() == 0 au VimEnter * nested :call LoadSession() end – 0xc0de 17 August 2015 в 04:57
  • 2
    Спасибо @ 0xc0de, большое предложение (я даже начал использовать его сам). Я обновил ответ. – mathielo 17 August 2015 в 22:19
  • 3
    как бы изменить это, чтобы, если я открываю vim с аргументами, он также не сохраняет этот сеанс – Dr Manhattan 30 June 2016 в 12:59
  • 4
    очень хорошо, но `exe 'source' b: sessionfile` нуждается в точке там? и проблема в том, что сеанс автозагрузки зависит от текущего домашнего каталога (get by pwd), как я могу установить его как последний рабочий каталог перед выходом vim? так что он может загрузить последний рабочий сеанс, а не сеанс в ~/? – van abel 24 May 2017 в 08:53
  • 5
    Если вы хотите иметь сеансы, но все же открываете отдельные файлы в каталоге без перезаписи, проверьте мою измененную версию этого в отдельном ответе: stackoverflow.com/questions/1642611/… – PMunch 5 December 2017 в 15:35

Если вы планируете иметь только 1 сеанс для проекта, просто сделайте

:mks

, который создаст файл Session.vim в текущем каталоге, а затем, чтобы открыть сеанс (из того же каталога) :

vim -S

Если вы меняете сеанс и хотите его сохранить:

:mks!

Это сохраняет сеанс, а не файлы!

< / blockquote>

Если вы планируете несколько сеансов, я предпочитаю сохранять их в скрытых файлах в каталоге проекта:

:mks .session-name.vim

Чтобы открыть его (из той же директории):

vim -S .session-name.vim

Сохранить сеанс:

:mks! .session-name.vim

Поскольку сеансы сохраняются в скрытых файлах, чтобы их просмотреть, не забудьте -a

ls -a
0
ответ дан cute_ptr 21 August 2018 в 20:35
поделиться

Обратите внимание, что: mksession не сохраняет изменения в файлах, которые вы сделали. Я сделал эту ошибку, закрыв vim после сохранения сеанса, предполагая, что я возьму оттуда. Но в следующий раз, когда я открыл сеанс, изменения, внесенные мной в файлы, исчезли.

36
ответ дан Deepanshu 21 August 2018 в 20:35
поделиться
  • 1
    Это должно сопровождаться любым ответом, связанным с :mksession. – Morgan Wilde 25 February 2014 в 20:31
  • 2
    да, вы, вероятно, захотите следовать с :wqa – Jonny Leeds 11 March 2015 в 17:36
  • 3
    или просто :xa Один меньше нажатия клавиши. Ура! – robin 9 July 2015 в 05:20
  • 4
    @robin: ваш комментарий спас мне жизнь !!!! – Thai Tran 24 December 2016 в 14:39
  • 5
    Вы также можете установить vim для автоматического сохранения файлов (если вам нравится эта вещь) в вашем .vimrc: vimrc au FocusLost * silent! wa . Это автоматически сэкономит время, когда буфер потеряет фокус. – grego 6 January 2018 в 23:52

Если вы используете NERDTree в качестве своего проводника / тире файла, я бы рекомендовал xolox / vim-session plugin вместо встроенной команды mksession. По какой-то причине: mksession не восстанавливает буферы NERDTree. Ваш пробег может отличаться, но я думал поделиться своим опытом.

30
ответ дан gdso 21 August 2018 в 20:35
поделиться
  • 1
    Для macvim мне необходимо обеспечить: let g:nerdtree_tabs_open_on_gui_startup=0 и let g:nerdtree_tabs_open_on_new_tab=0, чтобы выполнить xolox / vim-session. – Nianliang 1 September 2014 в 07:40

Для управления несколькими сеансами (на основе каждого каталога / репо) я недавно переключился с плагина vim-session на vim-workspace . Его управление сеансом относительно простое и работает очень хорошо.

0
ответ дан jaybay 21 August 2018 в 20:35
поделиться

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

set viewoptions+=cursor,folds,slash,unix
set viewoptions-=options

augroup vimrc
    autocmd BufWritePost *
    \   if expand('%') != '' && &buftype !~ 'nofile'
    \|      mkview
    \|  endif
    autocmd BufRead *
    \   if expand('%') != '' && &buftype !~ 'nofile'
    \|      silent loadview
    \|  endif
augroup END
0
ответ дан JohnTortugo 21 August 2018 в 20:35
поделиться

Этот замечательный плагин vim-session . Это очень мощно. Чтобы установить его:

cd ~/.vim/bundle
git clone https://github.com/xolox/vim-session.git

Я отобразил его функциональность в файле .vimrc следующим образом:

nnoremap <leader>so :OpenSession 
nnoremap <leader>ss :SaveSession 
nnoremap <leader>sd :DeleteSession<CR>
nnoremap <leader>sc :CloseSession<CR>

Теперь в обычном режиме просто введите <leader>ss, и вы см. команду, подобную этой

:SaveSession 

Теперь добавьте имя вашей сессии

 :SaveSession namesession

, и все.

Когда вы закрываете Vim и снова открываете его просто сделайте

 :OpenSession

, и вы увидите, что ваш сеанс открыт.

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

let g:session_directory = "~/.vim/tmp/session"  // the directory must be created before the sessions will be saved there
let g:session_autoload = "no"                   // automatic reload sessions
let g:session_autosave = "no"                   // autosave
let g:session_command_aliases = 1

На YouTube есть хороший учебник .

3
ответ дан jsouthwo 21 August 2018 в 20:35
поделиться

Спасибо @mathielo. Следуя примеру @mathielo, я добавил следующую строку в .vimrc, чтобы сохранить активный сеанс (если есть):

au VimLeave * if this_session != "" | exe "mksession! ".this_session

Если вы хотите разместить больше строк, вам нужно использовать endif:

au VimLeave * if v:this_session != ""
au VimLeave *   exe "mksession! ".this_session
au VimLeave * endif

Вам нужно сохранить новый сеанс в vim с помощью

:mks [Session filename]

и после запуска с

$ vim -S [Session filename]

vim начнет сеанс, и вам не нужно беспокоиться, чтобы сохранить сеанс каждый раз, когда вы закрываете vim.

Если у вас нет активного сеанса .vimrc ничего не сделает. Как и раньше.

Вот что я искал! Еще раз спасибо @mathielo!

1
ответ дан oml 21 August 2018 в 20:35
поделиться
  • 1
    Это то, что я тоже искал. Большой ! Я не могу вспомнить, сколько раз я потерял свою сессию, делая :q вместо :bd ... Спасибо! – Joel.O 20 September 2016 в 17:40

Так как это первый хит в Google для меня (и, возможно, других) для работы с сеансами в Vim, я решил немного добавить к ответу @ mathielo о том, как сделать это автоматически.

Мне нравится его код, но добавление решения «only if without args», похоже, немного не хватает. Это моя модифицированная версия:

function! MakeSession(overwrite)
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  if (filewritable(b:sessiondir) != 2)
    exe 'silent !mkdir -p ' b:sessiondir
    redraw!
  endif
  let b:filename = b:sessiondir . '/session.vim'
  if a:overwrite == 0 && !empty(glob(b:filename))
    return
  endif
  exe "mksession! " . b:filename
endfunction

function! LoadSession()
  let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
  let b:sessionfile = b:sessiondir . "/session.vim"
  if (filereadable(b:sessionfile))
    exe 'source ' b:sessionfile
  else
    echo "No session loaded."
  endif
endfunction

" Adding automatons for when entering or leaving Vim
if(argc() == 0)
  au VimEnter * nested :call LoadSession()
  au VimLeave * :call MakeSession(1)
else
  au VimLeave * :call MakeSession(0)
endif

Значительное изменение здесь - необязательное переопределение. Если вы откроете Vim без параметров, он откроет любой существующий сеанс и перезапишет изменения, сделанные при выходе. Если Vim открывается с параметрами, он создаст новый сеанс, если он не существует, это означает, что вы можете открывать отдельные файлы в каталоге, в котором есть сеанс, не перезаписывая его. Затем вы можете открыть Vim без параметров для запуска сеанса. Если сеанс не существует, он создает новый.

2
ответ дан PMunch 21 August 2018 в 20:35
поделиться
  • 1
    Я просто попробовал ваше вышеописанное решение в Neovim 0.2.2 и разместил ваш фрагмент в $HOME/.vim/plugin/sessions.vim, но он не сохраняет файлы сеанса. ¯ \ _ (ツ) _ / ¯ – Chris 19 March 2018 в 15:43
  • 2
    Этот поток и, в частности, связанный комментарий могут помочь: superuser.com/questions/404686/… У меня это в моем .vimrc, и это отлично работает. – PMunch 19 March 2018 в 16:11
  • 3
    получил его работу, видимо, мне нужно выйти (n) vim, чтобы сеанс был написан insert bad joke Еще раз спасибо за обмен – Chris 19 March 2018 в 17:13

Возможно, вы захотите установить эти параметры сеанса в своем vimrc. Особенно варианты раздражают, когда вы изменили vimrc после того, как вы сохранили сеанс.

set ssop-=options    " do not store global and local values in a session
set ssop-=folds      " do not store folds
57
ответ дан RocketDonkey 21 August 2018 в 20:35
поделиться
  • 1
    Большой! У меня была именно эта проблема вчера. Большое спасибо! – Jogusa 31 October 2009 в 17:56

Вы можете хранить сеанс там, где хотите.

Пример:

:mksession! D:/session.ses

Здесь хранится сеанс в драйвере D.

Это может быть открыто набрав

:so D:/session.ses

в любом из файлов vim.

0
ответ дан Sagar Jain 21 August 2018 в 20:35
поделиться

Существует очень полезный плагин для этой задачи vim-startify , который обрабатывает многие другие вещи, такие как недавно открытые файлы и т. д., у него тоже очень удобный интерфейс.

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

5
ответ дан vivek 21 August 2018 в 20:35
поделиться
Другие вопросы по тегам:

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