В основном функция 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();
}
?>
Вы хотите что-то вроде
:mksession ~/mysession.vim
. Затем вы можете загрузить этот vim-файл, и у вас будет старый сеанс:
:source ~/mysession.vim
или откройте vim с помощью -S:
$ vim -S ~/mysession.vim
Лично я просто обернуваю плагин 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
Если вы хотите автоматизировать процесс без использования каких-либо плагинов, вы можете использовать Уйти и вернуться из 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
if argc() == 0 au VimEnter * nested :call LoadSession() end
– 0xc0de
17 August 2015 в 04:57
pwd
), как я могу установить его как последний рабочий каталог перед выходом vim? так что он может загрузить последний рабочий сеанс, а не сеанс в ~/
?
– van abel
24 May 2017 в 08:53
Если вы планируете иметь только 1 сеанс для проекта, просто сделайте
:mks
, который создаст файл Session.vim
в текущем каталоге, а затем, чтобы открыть сеанс (из того же каталога) :
vim -S
Если вы меняете сеанс и хотите его сохранить:
:mks!
Это сохраняет сеанс, а не файлы!
< / blockquote>Если вы планируете несколько сеансов, я предпочитаю сохранять их в скрытых файлах в каталоге проекта:
:mks .session-name.vim
Чтобы открыть его (из той же директории):
vim -S .session-name.vim
Сохранить сеанс:
:mks! .session-name.vim
Поскольку сеансы сохраняются в скрытых файлах, чтобы их просмотреть, не забудьте
-a
ls -a
Обратите внимание, что: mksession не сохраняет изменения в файлах, которые вы сделали. Я сделал эту ошибку, закрыв vim после сохранения сеанса, предполагая, что я возьму оттуда. Но в следующий раз, когда я открыл сеанс, изменения, внесенные мной в файлы, исчезли.
:mksession
.
– Morgan Wilde
25 February 2014 в 20:31
.vimrc
: vimrc au FocusLost * silent! wa
. Это автоматически сэкономит время, когда буфер потеряет фокус.
– grego
6 January 2018 в 23:52
Если вы используете NERDTree в качестве своего проводника / тире файла, я бы рекомендовал xolox / vim-session plugin вместо встроенной команды mksession. По какой-то причине: mksession не восстанавливает буферы NERDTree. Ваш пробег может отличаться, но я думал поделиться своим опытом.
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 . Его управление сеансом относительно простое и работает очень хорошо.
Ниже приведен единственный конфиг. это действительно сработало для меня. Я взял его из здесь , где вы также можете взять более полную / сложную версию.
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
Этот замечательный плагин 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
Спасибо @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!
: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 без параметров для запуска сеанса. Если сеанс не существует, он создает новый.
$HOME/.vim/plugin/sessions.vim
, но он не сохраняет файлы сеанса. ¯ \ _ (ツ) _ / ¯
– Chris
19 March 2018 в 15:43
Возможно, вы захотите установить эти параметры сеанса в своем vimrc. Особенно варианты раздражают, когда вы изменили vimrc после того, как вы сохранили сеанс.
set ssop-=options " do not store global and local values in a session
set ssop-=folds " do not store folds
Вы можете хранить сеанс там, где хотите.
Пример:
:mksession! D:/session.ses
Здесь хранится сеанс в драйвере D.
Это может быть открыто набрав
:so D:/session.ses
в любом из файлов vim.
Существует очень полезный плагин для этой задачи vim-startify , который обрабатывает многие другие вещи, такие как недавно открытые файлы и т. д., у него тоже очень удобный интерфейс.
Я используя его с двух дней и до сих пор его работа отлично. Надеюсь, вам это поможет.
Session.vim
. Поэтому, если вы хотите иметь только один сеанс, сохраненный в текущем каталоге, вы можете использовать:mksession
или:mks
из vim, чтобы сохранить текущий сеанс, и простоvim -S
, чтобы открыть его. – anishpatel 17 March 2015 в 18:03