($width) AND $width .= 'px';
$style = " style=\"width: $width\"";
}
$value = $value ? $value : date('H:i');
$s = "";
return $s;
}
// form_date('start', '2018-07-05') 为空则当前日期
function form_date($name, $value = 0, $width = FALSE)
{
$style = '';
if (FALSE !== $width) {
is_numeric($width) AND $width .= 'px';
$style = " style=\"width: $width\"";
}
$value = $value ? $value : date('Y-m-d');
$s = "";
return $s;
}
/**用法
*
* echo form_radio_yes_no('radio1', 0);
* echo form_checkbox('aaa', array('无', '有'), 0);
*
* echo form_radio_yes_no('aaa', 0);
* echo form_radio('aaa', array('无', '有'), 0);
* echo form_radio('aaa', array('a'=>'aaa', 'b'=>'bbb', 'c'=>'ccc', ), 'b');
*
* echo form_select('aaa', array('a'=>'aaa', 'b'=>'bbb', 'c'=>'ccc', ), 'a');
*/
?>组保留的标签 余下为需要删除的标签
unset($oldtag[$key]);
}
}
}
if (!empty($oldtag)) {
$tagids = array();
foreach ($oldtag as $tagid => $tagname) {
$tagids[] = $tagid;
}
well_oldtag_delete($tagids, $tid);
}
$r = well_tag_process($tid, $fid, $create_tag, $tagarr);
return $r;
}
// 删除标签和绑定的主题
function well_oldtag_delete($tagids, $tid)
{
$pagesize = count($tagids);
$arrlist = well_tag_find_by_tagids($tagids, 1, $pagesize);
$delete_tagids = array(); // 删除
$tagids = array();
$n = 0;
foreach ($arrlist as $val) {
++$n;
if (1 == $val['count']) {
// 只有一个主题
$delete_tagids[] = $val['tagid'];
} else {
$tagids[] = $val['tagid'];
}
}
!empty($delete_tagids) and well_tag_delete($delete_tagids);
$arlist = well_tag_thread_find_by_tid($tid, 1, $n);
if ($arlist) {
$ids = array();
foreach ($arlist as $val) $ids[] = $val['id'];
well_tag_thread_delete($ids);
}
!empty($tagids) and well_tag_update($tagids, array('count-' => 1));
}
// 标签数据处理 $arr=新提交的数组 $tagarr=保留的旧标签
function well_tag_process($tid, $fid, $new_tags = array(), $tagarr = array())
{
if (empty($tid)) return '';
// 新标签处理入库
if ($new_tags) {
$threadarr = array();
$tagids = array();
$i = 0;
$size = 5;
$n = count($tagarr);
$n = $n > $size ? $size : $size - $n;
foreach ($new_tags as $name) {
++$i;
$name = trim($name);
$name = stripslashes($name);
$name = strip_tags($name);
$name = str_replace(array(' ', '#', "@", "$", "%", "^", '&', '·', '<', '>', ';', '`', '~', '!', '¥', '……', ';', '?', '?', '-', '—', '_', '=', '+', '.', '{', '}', '|', ':', ':', '、', '/', '。', '[', ']', '【', '】', '‘', ' ', ' ', ' ', ' ', ' '), '', $name);
$name = htmlspecialchars($name, ENT_QUOTES);
if ($name && $i <= $n) {
// 查询标签
$read = well_tag_read_name($name);
if ($read) {
// 存在 count+1
$tagids[] = $read['tagid'];
} else {
// 入库
$arr = array('name' => $name, 'count' => 1);
$tagid = well_tag_create($arr);
FALSE === $tagid and message(-1, lang('create_failed'));
$read = array('tagid' => $tagid, 'name' => $name);
}
$tag_thread = array('tagid' => $read['tagid'], 'tid' => $tid);
$threadarr[] = $tag_thread;
$tagarr[$read['tagid']] = $read['name'];
}
}
!empty($threadarr) and tag_thread_big_insert($threadarr);
!empty($tagids) and well_tag_update($tagids, array('count+' => 1));
}
$json = empty($tagarr) ? '' : xn_json_encode($tagarr);
return $json;
}
?>return $r;
}
/**
* @param int $page 页数
* @param int $pagesize 每页显示数量
* @return mixed
*/
function link_find($page = 1, $pagesize = 100)
{
$arr = link__find($cond = array(), array('rank' => -1), $page, $pagesize);
return $arr;
}
/**
* @param $id
* @return bool 返回FALSE失败 TRUE成功
*/
function link_delete($id)
{
if (empty($id)) return FALSE;
$r = link__delete(array('id' => $id));
link_delete_cache();
return $r;
}
//--------------------------kv + cache--------------------------
/**
* @return mixed 返回全部友情链接
*/
function link_get($page = 1, $pagesize = 100)
{
$g_link = website_get('friends_link');
if (empty($g_link)) {
$g_link = link_find($page, $pagesize);
$g_link AND website_set('friends_link', $g_link);
}
return $g_link;
}
// delete kv and cache
function link_delete_cache()
{
website_set('friends_link', '');
return TRUE;
}
?> $v = implode(",", $v);
$temp[] = $v;
}
// 去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
// 再将拆开的数组重新组装
$output = array();
foreach ($temp as $k => $v) {
if ($stkeep) $k = $starr[$k];
if ($ndformat) {
$temparr = explode(",", $v);
foreach ($temparr as $ndkey => $ndval) $output[$k][$ndarr[$ndkey]] = $ndval;
} else $output[$k] = explode(",", $v);
}
return $output;
}
// 合并二维数组 如重复 值以第一个数组值为准
function array2_merge($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array1 as $k => $v) {
isset($v[$key]) ? $arr[$v[$key]] = array_merge($v, $array2[$k]) : $arr[] = array_merge($v, $array2[$k]);
}
return $arr;
}
/*
* 对二维数组排序 两个数组必须有一个相同的键值
* $array1 需要排序数组
* $array2 按照该数组key排序
* */
function array2_sort_key($array1, $array2, $key = '')
{
if (empty($array1) || empty($array2)) return NULL;
$arr = array();
foreach ($array2 as $k => $v) {
if (isset($v[$key]) && $v[$key] == $array1[$v[$key]][$key]) {
$arr[$v[$key]] = $array1[$v[$key]];
} else {
$arr[] = $v;
}
}
return $arr;
}
?>
Vim使用学习以及ideaVim(持续补充)-软件玩家 - 软件改变生活!
Vim使用学习以及ideaVim
我的ideaVim配置
文章目录
- Vim使用学习以及ideaVim
- 方向
- nomral模式
- 进入插入模式
- 删除命令
- 粘贴命令
- 拷贝命令
- 替换命令
- 修改命令
- motion---表示操作范围的指令
- 文件信息
- 可视模式(visual)
- 搜索命令
- 替换命令
- 执行shell命令
- 文件另存为
- 合并文件
- 打开多个文件
- 视图
- 选择(需要在.ideavimrc文件中配置set argtextobj并:source ~/.ideavimrc)
- 环绕操作(需要使用[vim-surround](https://github/tpope/vim-surround)插件)
-
- 切换标签页
方向
如果光标无法连续移动的话进入终端执行命令
defaults write com.jetbrains.intellij ApplePressAndHoldEnabled -bool false
然后重启idea
nomral模式
进入插入模式
| 命令 | 效果 |
|---|
| i | 在光标的前面进入插入模式 |
| I | 在光标所在行的行首进入插入模式 |
| a | 在光标的后面进入插入模式 |
| A | 在光标所在行尾进入插入模式 |
| o | 在光标所在行的下方插入空行并进入插入模式 |
| O | 在光标所在行的上方插入空行并进入插入模式 |
| s | 删除光标指定的字符并进入插入模式 |
| S | 将光标所在行清空并进入插入模式 |
删除命令
| 命令 | 效果 |
|---|
| x | 删除单一字符 |
| d | 删除更多的字符可以使用d命令(需要配合motion使用)如下 |
| d0 | 删除光标从当前位置(不包含)到该行行首的所有字符 |
| d^ | 同上 |
| d$ | 删除从光标当前位置(包含)到该行行尾的所有字符 |
| db | 删除从光标当前位置(不包含)到单词起始处的所有字符 |
| de | 删除从光标当前位置(包含)到单词结尾处的所有字符 |
| dw | 删除从光标当前位置(包含)到下一个单词的起始处(注意, 是光标所在单词的下一个单词)的所有字符 |
| dh | 删除光标前面一个字符 |
| dl | 删除光标当前位置的字符 |
| dj | 删除光标所在行以及下一行所有字符 |
| dk | 删除光标所在行以及上一行给所有字符 |
| dd | 删除光标所在行的所有字符 |
| dgg | 删除从光标当前行(包含)到文件的开头的所有字符 |
| dG | 删除从光标当前行(包含)到文件的末尾的所有字符 |
| :[begin],[end] d | 删除指定范围 |
| %d | 全文删除 |
粘贴命令
| 命令 | 效果 |
|---|
| p | 将最后一次删除的内容使用相同的格式和内容,粘贴到当前光标之后 |
| P | 将最后一次删除的内容使用相同的格式和内容,粘贴到当前光标之前 |
⚠️:
- 如果需要粘贴的是整行为单位, 那么p命令行将在光标的下一行开始粘贴
- 如果拷贝的是非整行的局部字符串, 那么p命令将在光标后开始粘贴
拷贝命令
| 命令 | 效果 |
|---|
| y [数字] motion | 实现拷贝结合motion(一般加了数字就说明要把对应数字的字符或者行数进行拷贝) |
替换命令
| 命令 | 效果 |
|---|
| r | 光标所在位置先点击r键之后输入新的字符即可 |
| [数字] r | 表示从光标处开始, 将多个字符统一替换为点击r键后输入的新字符 |
| R | 一键进入替换模式, 类似于插入模式只不过是更改光标位置的字符, esc退出 |
修改命令
修改和替换是不一样的, 修改会进入的是插入模式
| 命令 | 效果 |
|---|
| c [数字] motion | 实现修改数字表示行数(一般加了数字就说明要把对应数字的字符或者行数清空然后进行插入模式) |
| c0 | 删除光标从当前位置(不包含)到该行行首的所有字符, 并进入插入模式 |
| c^ | 同上 |
| c$ | 删除从光标当前位置(包含)到该行行尾的所有字符, 并进入插入模式 |
| cb | 删除从光标当前位置(不包含)到单词起始处的所有字符, 并进入插入模式 |
| ce | 删除从光标当前位置(包含)到单词结尾处的所有字符, 并进入插入模式 |
| cw | 删除从光标当前位置(包含)到下一个单词的起始处(注意, 是光标所在单词的下一个单词)的所有字符, 并进入插入模式 |
| ch | 删除光标前面一个字符, 并进入插入模式 |
| cl | 删除光标当前位置的字符, 并进入插入模式 |
| cj | 删除光标所在行以及下一行所有字符, 并进入插入模式 |
| ck | 删除光标所在行以及上一行的所有字符, 并在光标下一行进入插入模式 |
| cc | 删除光标所在行的字符, 并进入插入模式 |
motion—表示操作范围的指令
| 命令 | 效果 |
|---|
| 0 (标注:数字0) | 将光标定位到行首的位置 |
| ^ | 同上 |
| $ | 将光标定位到行尾的位置 |
| b | 将光标定位到光标所在单词和起始处 |
| e | 将光标定位到光标所在单词的结尾处 |
| w | 将光标定位到下一个单词的起始处(注意, 是光标所在单词的下一个单词) |
| gg | 将光标定位到文件的开头 |
| GG | 将光标定位到文件的末尾 |
文件信息
这里红色框框展示的就是查看到的文件信息
| 命令 | 效果 |
|---|
| ctrl + g | 查看文件信息 |
| [数字]G | 移动到数字的行数去 |
| :[数字] | 跳转到数字的行数 |
| % | 光标停留在在一对一对出现的括号等符号的某一个上面然后按下%就可以快速定位到另一半括号(对于<>无效) |
| [数字]>> | 缩进[包含光标所在行及以下的行数] |
| [数字]<< | 反缩进[包含光标所在行及以下的行数] |
可视模式(visual)
搜索命令
| 命令 | 效果 |
|---|
| / | 查询所想查询的字符串则高亮显示, 默认起始位置为里光标最近的那个 如果光标所在位置就是第一个那么默认搜索到的第一个是顺位的第一个也就是光标起始的第二个 使用n跳转到下一个 使用N跳转到上一个 |
| ? | 与/都是搜索只不过方向相反 使用n跳转到上一个 使用N跳转到下一个 |
| :nohl | 在查询完之后退出高亮模式 |
以下十个符号是不能直接进行搜索的需要添加“\”进行转译
. * [ ] ^ % / ? ~ $
替换命令
| 命令 | 效果 |
|---|
| : s/[被替换字符串]/[替换字符串] | 替换光标所在行的第一个搜索到的被替换字符串,如果光标所在位置为第一个, 则被替换的是顺位第一个也就是, 光标所在位置起算的第二个 |
| : s/[被替换字符串]/[替换字符串]/g | 替换光标所在行所有被替换字符 |
| :%s/[被替换字符串]/[替换字符串]/g | 替换全文所有被替换字符 |
| :%s/[被替换字符串]/[替换字符串]/gc | 全文自定义选择替换 会出现以下选项 y: 替换光标所在位置的被替换字符串, 然后顺位到下一个 n: 不替换当前光标所在位置的被替换字符串, 然后顺位到下一个 a: 替换当前光标所在位置开始(包含)的所有被替换字符串 q: 结束自定义替换 l: 替换第一个并回到文件起始 |
| :[数字],[数字]s/[被替换字符串]/[替换字符串]/g | 表示替换某行到某行的所有被替换字符串 |
执行shell命令
| 命令 | 效果 |
|---|
| :!ls | 搜索当前文件夹下有哪些文件, 然后点击回车退出 |
文件另存为
| 命令 | 效果 |
|---|
| :w [文件名] | 另存为文件, 局部另存为需要先进入可视模式点击v进入可视模式然后选择需要的内容之后在使用:w进行另存为 (ideavim中无法另存为) |
| :w! [文件名] | 覆盖另存为 |
合并文件
| 命令 | 效果 |
|---|
| :r [文件名] | 合并文件, 将文件读取之后, 插入到当前文本尾部 |
打开多个文件
| 命令 | 效果 |
|---|
| -o | 水平并排(ideavim中无法使用) |
| -O | 垂直并排(ideavim中无法使用) |
| ctrl+w+w | 将光标切换到下一个文件(ideavim中无法使用) 对于垂直并排可使用ctrl+w+上下 对于水平并排可使用ctrl+w+左右 |
| :qa | 忽略所有修改并退出 |
| :wqa | 保存所有修改并退出 |
视图
| 命令 | 效果 |
|---|
| ctrl + d | 下一页 |
| ctrl + u | 上一页 |
选择(需要在.ideavimrc文件中配置set argtextobj并:source ~/.ideavimrc)
| 命令 | 效果 |
|---|
| viw | 选中所在光标位置的单词 |
| vaw | 选中单词并带一个空格, 默认是后方空格, 如果后面没有则带前方 |
| via | 选中一个对象不包含空格和逗号 |
| vaa | 在via的基础上选中逗号和空格 (ideavim中暂时不生效) |
| daa | 删除这个参数包含逗号和空格 (ideavim中暂时不生效) |
| caw | 删除一个单词包含逗号和空格并进入插入模式 |
| cia | 删除这个参数并进入插入模式 |
| caa | 删除这个参数逗号和空格并且进入插入模式 (ideavim中暂时不生效) |
| yaw | 复制一个单词, 并带一个空格, 默认是后方空格, 如果后面没有则带前方, 可以用p粘贴 |
| yia | 复制一个参数, 可以用p粘贴 |
| yaa | 复制一个参数包含逗号和空格, 可以用p粘贴 (ideavim中暂时不生效) |
环绕操作(需要使用vim-surround插件)
1. 新增环绕
| 结束后的模式 | 目标范围 | 新增内容 | 原始文本 (ps: 黄色为高亮md格式编写====自行配置, 看不懂的话自行忽略) | 命令 | 更改效果 (ps: 如果你查看的文档出现\是转译符, 看不懂的话自行忽略) |
|---|
| 常规模式 | 单词 | 字符 | Hello world | ysiw* | Hello *world* |
| 常规模式 | 单词 | 标签 | Hello world | ysiwt | Hello <strong>world</strong> |
| 常规模式 | 单词 | 括号 | Hello world | | |
| 常规模式 | 行尾 | 括号 | Hello world, world | ys$) | Hello (world, world) |
| 常规模式 | 查找 | 标签 | Hello world | ysfot | Hell<em>o wo</em>rld |
| 插入模式 | | 符号 | | 快捷键: <ctrl-g>" | “” |
| 插入模式 | | 符号 | Hello world | 快捷键: <ctrl-g>" | Hello “world” |
| 插入模式 | | 符号 | Hello world | 快捷键: <ctrl-g>S" | “” |
2. 修改环绕
| 结束后的模式 | 目标范围 | 替换内容 | 原始文本 (ps: 黄色为高亮md格式编写====自行配置, 看不懂的话自行忽略) | 命令 | 更改效果 (ps: 如果你查看的文档出现\是转译符, 看不懂的话自行忽略) |
|---|
| 常规模式 | 单词 | 引号 | Hello “world” | cs"’ | Hello ‘world’ |
| 常规模式 | 单词 | 标签 | Hello “world” | cs" | Hello <p>world</p> |
| 常规模式 | 单词 | 标签 | Hello <p>world</p> | cst | Hello <html>world</html> |
3. 删除环绕
| 结束后的模式 | 目标范围 | 删除内容 | 原始文本 (ps: 黄色为高亮md格式编写====自行配置, 看不懂的话自行忽略) | 命令 | 更改效果 (ps: 如果你查看的文档出现\是转译符, 看不懂的话自行忽略) |
|---|
| 常规模式 | 单词 | 字符 | Hello ‘world’ | ds’ | Hello world |
| 常规模式 | 单词 | 标签 | Hello “‘world’” | Ds’ds" | Hello world |
| 常规模式 | 单词 | 括号 | Hello <html>world</html> | Dst | Hello world |
切换标签页
本文标签:
vimideaVim
更多相关文章
如何在Windows10上安装Vim
如何在Windows10上安装Vim 文章目录 如何在Windows10上安装Vim1. 下载Vim2. 配置环境变量3. 最后 1. 下载Vim 链接:Vim下载页面,根据自己的实际需要下载&
Vim相关使用命令学习
全文使用mapping.txt作为示例,全文区分大小写 1.查看mapping.txt vim mapping.txt 2.插入或编辑 i 3.光标到首行 gg 4.全选 ggVG 5.在vim中搜索ÿ
vim使用(一)——快捷键
一、移动光标 1、左移h、右移l、下移j、上移k 2、向下翻页ctrlf,向上翻页ctrlb 3、向下翻半页ctrld,向上翻半页ctrlu 4、移动到行尾$&#x
linux里没有vi编辑器怎么办,如果是linux没有vi、vim等编辑器如何操作
cd etcapt 进入apt目录 echo deb http:mirrors.163ubuntu trusty main restricted universe multiverse >> sources.lis
Linux系统——vim按键说明
vim按键说明 第一部分:一般命令模式可用的功能按键说明,光标移动、复制粘贴、查找替换等 移动光标 光标左移一个字符:h、左箭头⬅光标右移一个字符:l、右箭头→光标
常用日志查询命令详解(vim、tail、cat、grep、less、more、sed、xargs)
Linux-系统日志查询命令详解 一、tail & head tail主要用于显示文件的末尾内容。 将每个FILE的最后10行打印到标准输出。如果有多个文件,在每个文件之前加上一个头文件ÿ
发表评论