vim中多行缩进

在vim中按v进出visual可视模式后,可以按<和>进行多行缩进,这时要配合tab设置以达到想要的效果:

vi /etc/vim/vimrc里可以这样设置:

set smartindent
set tabstop=4
set shiftwidth=4

后面还有这两行也可以试试:
set expandtab
set softtabstop=4

参考:https://segmentfault.com/q/1010000003820986/a-1020000003821447

https://blog.csdn.net/topasstem8/article/details/6678215

2. 通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。

3.gg   shift+G 首尾
4.全文字眼替换  %s/source/dist/g 或者 :1,$ s/source/dist/g
  :s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

n 为数字,若 n 为 .,表示从当前行开始到最后一行

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

* ************************************

1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

5. 删除文本中的^M

问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

· 使用命令:cat filename1 | tr -d “^V^M” > newfile;

· 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。

· :%s/^M$//g

如果上述方法无用,则正确的解决办法是:

· tr -d “\r” < src >dest

· tr -d “\015” dest

· strings A>B

6. 其它

利用 :s 命令可以实现字符串的替换。具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上

从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索

字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

Posted in vi

vi/vim中tabstop、shiftwidth、softtabstop以及expandtab的关系im中的tab键设置

来自:https://blog.csdn.net/chenxiang6891/article/details/41348073

先贴出原始类型部分学习以后,写在下面有一部分心得

vim中的tab键设置

基本上在 Vim 可以使用

set shiftwidth=4

來設定 tab 寬。

而使用

set expandtab

來將 tab 轉成 space (實際存起來的檔案將會是以 space , not tab )

如果要將既有的 <Tab> 轉成 space 可以再 expandtab 之後輸入:

:retab!

來做轉換。

而 tabstop 是實際上讀到檔案的 \t (Tab 字元) 時,要解譯為幾個空白

通常設定為 4

set tabstop=4

另外 softtabstop 則是,你在編輯動作 (Backspace) 或是 (Tab) 時,對空白的解譯

譬如說:

set noexpandtab
set sw=4
set tabstop=4
set softtabstop=4

新加入的 Tab 都會是 \t , Tab 為 4 個 space ,讀取檔案的 \t 會被翻譯為 4 個 space ,在操作 BS 的時候,4 個空白會被當作一個 tab 刪除。

實際上 softabstop 比較常用在 expandtab 的模式下:

set expandtab
set sw=4
set tabstop=4  ” 怕檔案裡頭仍有 \t
set softtabstop=4

如此被延展為空白的 space 也可以像是 tab 一樣被刪除固定的 space 數(softtabstop=4)附帶一題,由於 tab 每個人的用法都不一樣,而且變化很多而現在很多專案都只使用 space 而不使用 tab 了!

也就是:

set et sw=4 ts=4 sts=4

這樣的設定通常是被建議的。

當然如果你寫 python 就不一樣。 :p

這邊順便引入 vim help 的 ‘tabstop’ 章節:

There are four main ways to use tabs in Vim:

1. Always keep ‘tabstop’ at 8, set ‘softtabstop’ and’shiftwidth’ to 4(or 3 or whatever you prefer) and use ‘noexpandtab’. Then Vim will use a mix of tabs and spaces, but typing <Tab> and <BS> will behave like a tab appears every 4 (or 3) characters.

2. Set ‘tabstop’ and ‘shiftwidth’ to whatever you prefer and use ‘expandtab’.  This way you will always insert spaces.  The formatting will never be messed up when ‘tabstop’ is changed.

3. Set ‘tabstop’ and ‘shiftwidth’ to whatever you prefer and use a |modeline| to set these values when editing the file again.Only works when using Vim to edit the file.

4. Always set ‘tabstop’ and ‘shiftwidth’ to the same value, and ‘noexpandtab’.  This should then work (for initial indents
only) for any tabstop setting that people use.  It might be nice to have tabs after the first non-blank inserted as spaces if you do this though. Otherwise aligned comments will be wrong when ‘tabstop’ is changed.

 

————-

 

On Feb 5, 11:17 pm, c9s <cornelius.h…@gmail.com> wrote:

>         set noexpandtab
>         set sw=4
>         set tabstop=4
>         set softtabstop=4

> 新加入的 Tab 都會是 \t , Tab 為 4 個 space ,讀取檔案的 \t 會被翻譯為 4 個
> space ,在操作 BS 的時候,4 個空白會被當作一個 tab 刪除。

註:這邊的 “翻譯為 4 個 space” 是說,顯示是四個 space 的寬度,實際上存檔還是存成 \t (Tab)

不知道理解得对不对,在我尝试后有这样的一个前题,即“vim对于空白符要么是通过全space来实现【expandtab】上面的缩进和\tab,要么最少化\t和space【noexpandtab】”,这个前题,请大牛斧正一下。

关于tabstop、shiftwidth、softtabstop以及expandtab这几个参数在网上找了相关资料怎么也没有整明白是怎么一回事。只有上面这篇文章看了以后还靠点谱,就自已实践后所得的一些心得:

1、先说一下,tabstop本身吧,如上面文中说讲其实就是一个常量,进行\t与space的宽度兑换,即一个\t能兑换成多少个宽度的space字符。如果在没有设置softtabstop之前(即softtabstop=0)。如果触发一个\t操作输入时间兑换成的tab宽度就是一个\t且宽度等于tabstop,还有就是作为读档时一个\t键能占多少个宽度。这个大家都能明白不

2、接着说一下shiftwidth它是一个缩进的长度设置。要想使用你的代码看起来更美观,他与其它的组合(tabstop、softtabstop以及expandtab)有很多种这里一般推荐上面的第二种,一般推荐上面的.他也有间接的充当了扳机的作用,就是如果你在进行多少个缩进的时候并且是expandtab这个时候他也有合并的操作就是如果shiftwidth满足多少个长度等于tabstop时兑换成一个\t,当然这里面有一个重要的概念就是关于\t键的对齐,上面满足兑换条件的前题之前的前题就是\t的对齐,能理解吗?慢慢实践吧

3、softtabstop是一个转换器,当你通过键盘触发了一个\t操作时,他会将其转换为多少个宽度的字符,但是vim中此时他只点有\t而不是很多个你设定的sottabstop的宽度的spaces,这个属性是一个很有意思的东西。当你开启他时(即 softtabstop!=0),这个时候只要点击键盘上的Tab键时,就会触发一个兑换与合并的功能(当然这个你得开启noexpandtab这个属性,这个属性下面会讲),那么这个时候就输入的tab就不是直接输入到vim中了,这个时候tab键就充当一个扳机触发了兑换与合并的操作,当然如果expandtab了,那么你键入tab键时,就直接总换成softtabstop所对于的宽度的space了

4、现在是expandtab了,当然就是展开了。就是将所有输入到vim中的\t转化成为多少个空格了,

4.1)如果未开启softtabstop,则直接展开tabstop常数个spaces

4.2)如果开启sfottabstop,那么就以softtabp为常数个spaces

如果noexpandtab,那么就是解释上同不过仅仅是一个\t点用多少个宽度的spaces的位置(注意了,其实质是占位)。

心得到此了。还有什么要说的呢。就是解释一下,上面那几种配置吧

1、这个就是前面提到的大前题了,即最小化\t与spaces实现空白符,他实现了\t实体键入的与softtabstop之前的兑换。同样是shiftwidth进行缩进时的spaces与\t之前的兑换。适合于window时下的编辑程,当然如果你公司要求通过spaces来实现缩进下面的更适合你了

2、第二个配置是展开了,就不多说了,只要你把shiftwidth与tabstop配置得与你代码看起来好看,你怎么配都可以

3、这个就是只有在vim下,编辑与查看了。这个有局限

4、这个只有你实践以后才知道,就是\t对齐惹的祸。没有办法说明白,实践实践就出来了。

如果你的公司有代码要求不用\t来代表缩进的话那么2适合你,3呢不知道,4呢呵呵~~~,我是不适合的。

到这里就完了,如果理解有问题请来者您留下你的智慧~~~

Posted in vi

php log: Call to undefined function session_register()

查看/var/log/nginx/error.log, 报错:Call to undefined function session_register()

解决方法:

1、PHP4.2以上版本不需要用session_register()注册SESSION变量,直接用:
$_SESSION[“string”]=“string”;
赋值。
2、用$_SESSION[“string”]获取变量值。
3、用$_SESSION[“string”][$n]可传递SESSION数组。

参考:https://blog.csdn.net/wusuopubupt/article/details/8698981

Posted in PHP

nginx安装和php配置

安装:

配置:

找到:

改为:

上面就完成了,下面重启并测试一下:

把下面的内容写入/var/www/html/phpinfo.php

从浏览器打开ip/phpinfo.php, 能显示内容就表示成功了!

ssh到树莓派中文显示?乱码

ssh到树莓派中文显示?乱码,还有mac电脑ssh到树莓派还显示一些报错信息:

-bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)

-bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)

-bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)

解决这个问题,要在树莓派上运行命令sudo raspi-config,然后在localisation options里选Change locale, 然后在第一个“请选择需要生成的区域设置(locale)”例表里选上“en_US.UTF-8 UTF-8”, zh_CN,UTF-8 UTF-8″, “zh_CN GB2312”, “zh_CN.GB18030 GB18030”, “zh_CN.GBK GBK”或如果有其它语言乱码的,就选上对应的语言。

然后下一个例表“哪个将作为系统环境默认的区域设置(locale)?”里选想让操作系统菜单等想要显示的语言文字,我这里选“en_US.UTF-8”,ok后,就完成了。

这时重新从其它电脑ssh到树莓派就没有上面的报错了。乱码也正确显示中文了。

或者:

 

ssh报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

这个错误是因为本机记录的远程服务器对应的共钥信息和现在要连接的不一样了。

解决的方法有2个:

  1. 直接打开~/.ssh/know_hosts,找到对应的服务器ip或域名那行,册掉,保存文件后就可以重新连接。
  2. 用命令

    同样可以达到册除本机记录的远程服务器公钥的效果,从而可以重新连接。

python读取树莓派状态(CPU温度,使用率,RAM使用率,硬盘使用率)

运行结果:

 

 

参考:http://shumeipai.nxez.com/2014/10/04/get-raspberry-the-current-status-and-data.html

查看树莓派温度

终端命令1:

终端命令2:

python 函数1:

python 函数2:

python 函数3: